I am doing web development for the past 6 years. But somehow, I never got the fe
ID: 649306 • Letter: I
Question
I am doing web development for the past 6 years. But somehow, I never got the feeling that I did a good job. I always felt that my code was not production quality. I felt like someone who delivers sub-par products.
An analogy: Me developing apps for paying clients is like.... a 14 year old who just knows how to shoot and move around the basketball court without falling down, playing among professionals in the NBA. That should be an accurate description :|
I wouldn't buy from me, if I were the client.
I want to move from this current position to a stage where I feel confident that my websites web apps are "professional", "secure", "scalable", (insert all requisites of a product that is worth paying for or relying on for your business).
My question is:
1. What are the things I should learn, and..
2. From where can I learn those..
..in order to create truly professional websites and web applications that other people/businesses can rely upon?
I am sick of feeling like an amateur even after so many years.
I want help in getting started. I can learn if I know what to learn. I can learn given enough time and things to experiment with, but I don't want to make my clients guinea pigs.
Here is what I know and don't know:
I know or can learn the needed syntax in C# to convert the required business logic from concept to working code.
I can write somewhat complex select queries and even a few joins if needed to fetch data. Of course I can insert, update, delete. But that's it. I know nothing else in SQL server.
I know enough web front-end technologies to develop good UI. This is not a problem area.
I know enough about hosting/domains to register and buy hosting and point servers at each other so that example.com actually loads the website. Not much more than that.
For all practical purposes, ZERO knowledge or experience in handling security and server load
No idea about caching, at any level.
I only know the coding best practices, dos and donts. I don't know the same for real world apps that thousands of people are going to use.
Every time I read a question in SO that has anything to do with a production application, all the answers and the question itself is all Greek and Latin to me. I feel inspired that there is so much to learn, but I can't figure out how to start.
I will primarily be working with the Microsoft Stack. So any answer specific to it will also be great.
Explanation / Answer
There is a good book, I think it's for you, Mike Gunderloy "Coder to Developer". It outlines the differences between amateur coders and professional developers, and maps a path between the two.
Another point is, you should understand that everything is a trade-off. Scalability negatively affects security, security negatively affects scalability, and both of them negatively affect budget and schedule of your project. You can (and should) learn your choices, to make them informed, and to understand, that they are, in fact, choices. There is no such thing as free security, or free scalability.
Next, you need to know the meaning of the buzz-words you've listed.
What constitutes a professional web-site for you? Is it the site that suits your customer's needs? A site with a good and sound architecture? A site that is easy to deploy, support, and develop? A site that looks good in all the major browser, uses all the latest AJAX technologies?
What is a secure web-site? Hard-to-hack, protected from DOS/DDOS/XSS, protected from personal/sensitive data theft?
What is a scalable web-site? High-throughput, low-latency, high peak-load?
To make your projects more "professional", and to get a solid understanding of what makes a software professional, read a book by Steve McConnell "Code Complete 2.0", it's very good. Also "Software Manager Survival Guide" by the same author, it will give you the perspective of the "dark side", your customers and managers. "Professional Software Development" by McConnell is good too, as I hear, but I haven't read it yet, so, can't recommend it wholeheartedly yet.
As to what you can do to improve your skills and your self-esteem :)
Read the above books, and "Pragmatic Programmer" by Hunt & Thomas, "Design Patterns: Elements of Reusable Object-Oriented Software" by Gamma et al, "Refactoring" by Martin Fowler.
Learn a new language (IronPython/Python, for example)
Scalability: implement web farm - make your site work on two web-servers with load balancing (this is not easy, I must warn) implement SQL Server cluster (this is extremely hard)
Security: SQL Injection is pretty easy to handle, especially with .NET.
So, learn the ways to handle it if you don't know yet, and review your sites for a proper handling of SQL parameters
Authentication/Authorization is also pretty easy with .NET, but you can make it harder implementing your own Authentication provider
Test your sites trying to break in into them, inject SQL, inject JavaScript, make them crash.
And last point, test for everything you strive for, testing helps you be sure that you've actually done what you intended.
A truly last point - read, learn and participate in an open source project, as noted above.
Related Questions
Navigate
Integrity-first tutoring: explanations and feedback only — we do not complete graded work. Learn more.