Take the 2-minute tour ×
Programmers Stack Exchange is a question and answer site for professional programmers interested in conceptual questions about software development. It's 100% free, no registration required.

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.

share

migration rejected from stackoverflow.com Nov 19 '13 at 19:21

This question came from our site for professional and enthusiast programmers. Votes, comments, and answers are locked due to the question being closed here, but it may be eligible for editing and reopening on the site where it originated.

closed as off-topic by gnat, GlenH7, Dan Pichelman, Robert Harvey, MichaelT Nov 19 '13 at 19:21

This question appears to be off-topic. The users who voted to close gave this specific reason:

  • "Questions seeking career or education advice are off topic on Programmers. They are only meaningful to the asker and do not generate lasting value for the broader programming community. Furthermore, in most cases, any answer is going to be a subjective opinion that may not take into account all the nuances of a (your) particular circumstance." – Dan Pichelman, Robert Harvey, MichaelT
If this question can be reworded to fit the rules in the help center, please edit the question.

    
I would recommend giving some guidance of what you do know. That would provide more tailored answers, if you will. –  Ryan Wersal Apr 26 '11 at 7:18
    
hey senthil , i completely understand what you are saying. i havent spent six years but i feel stuck as well. You know one very interesting and informative Source is the following question asked here on programmers SE only ; titled programmers.stackexchange.com/questions/46716/… . Please take a look. the question has 1.4K votes ; has been favourited 270 times; there are 75 answers and the first answer has 1.2K votes. –  Wildling Apr 26 '11 at 8:45
1  
Possible duplicate of programmers.stackexchange.com/questions/46716/… –  Anna Lear Apr 26 '11 at 14:29
    
I would recommend you this book on C# amzn.to/mZIlCz and if you are lazy reading it you can watch bit.ly/nWBDkT hope it helps :) Cheers –  Aviatrix Aug 13 '11 at 20:12
comments disabled on deleted / locked posts

6 Answers

up vote 8 down vote accepted

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.

share
    
+1 for the many books you suggested –  user19224 Apr 26 '11 at 9:56
add comment

My humble opinion about what's the main difference comparing a purely enthusiast programmers and professional ones is providing to end-users and customers exactly what they require in the desired time.

Vocational software doesn't have timelines at all, while professional has.

Another good point is professional software isn't a "take it and goodbye" product. It must provide documentation and support, because software business doesn't end selling it.

In terms of what you'd learn, I'd point to the fact that a good professional must know about:

  • Software design patterns.
  • Unit, integration testing.
  • Issue tracking.
  • Language-specific programming guidelines and naming.
  • Exception handling.
  • Good skills on choosing the right technology for a concrete solution (no silver bullets, please).
  • High knowledge in some technologies and programming languages in order to think not only good designs but also efficient architectures for specific platforms.
  • Great relational design knowledge and object-oriented programming, depending on which data store is going to be used for some project (relational or object-oriented, document-oriented databases).
  • Honesty. Deliver if you can do it.
  • Avoiding square wheels. Professional software is built by integrating other's work. Invent a wheel if it's going to be a better one or if no other fits your requirements.

I'm absoltuely sure there're more points, but this a good summary.

share
1  
+1: this is a very complete answer. As for how to acquire these skills; working with people who are better than you can really boost your learning curve. –  Uw Concept Apr 26 '11 at 8:14
1  
Absolutely agreed about working with others. –  Matías Fidemraizer Apr 26 '11 at 8:16
add comment

My suggestion is to find a group of others who are web developers that like to get together and nerd out / talk shop. If you can't find one in your area try making one or get in touch with a local firm and see what technologies they're excited about and why.

Another idea is to take a few classes, grab some books, or try OCW: http://en.wikipedia.org/wiki/OpenCourseWare

Sounds a little like you're a tad short on confidence and looking for someone to help shine some light on that one special thing that makes you official. If you've been floating for 6 years, you have to be doing something right. Find that gauge that gives you a little more confidence and go for it.

Good Luck man =]

share
add comment

There's different topics involved here:

  • Quality of code

Read code complete. It covers all the aspects related to writing code that a "professional" developer should take into account. Even if it's not specific to your environment, the principles translate freely to any platform.

  • Secure design

OWASP is your friend. The OWASP guide discusses the underlying principles of building secure web apps. The dirty little secret is that most "professional" web developers don't know much about security either. Most web apps are like swiss cheese. If you want to verify that your app is secure, the OWASP ASVS verification standard is a useful tool.

  • Scalable design

With scalable typically what's meant is "scales to many concurrent users". I don't really know where to point you on this. It may help to read up on the architectures of the popular large web apps, to understand where the bottlenecks can be. Facebook's architecture is well-documented if you google for it.

share
add comment

I would highly recommend opening up the source code of a largely accepted web project and reading it like a book. Nothing compares to it. I opened up Joomla. I went through only two of their classes and learnt ( British English ) such a lot and felt a lot more confident.

share
1  
+1 for "learnt". –  user21007 Apr 26 '11 at 12:28
    
@user21007 : smile –  Imran Omar Bukhsh Apr 27 '11 at 6:31
add comment

Your list of deficiencies doesn't, to me, sound like issues you can tackle on your own effectively. You can read all you want about caching, scalability, and optimization, but it won't really matter unless you have the opportunities to put them into practice. Working in mission-critical, team-oriented situations will hone those skills quickly because they matter.

In my mind, what separates a coder from a skilled developer is the amount of planning they put into their projects. There's an adage that goes something like "five hours of debugging will save one hour of planning."

A few years ago I worked for a large international corporation whose production facility was pulling in about $1 million in revenue every hour, 24 hours a day. Even a few minutes of downtime cost the company thousands of dollars, not to mention the hundreds of idled workers. Consequently, every rollout of new code required lots of upfront planning to make sure they went smoothly.

  • What problems does the code fix?
  • Will there be impacts on other functional areas?
  • What is the rollback plan in case it doesn't work?
  • How much downtime will there be?
  • Will the new code actually make things better overall?
  • Will you be on call for the next 72 hours to solve problems?
  • Is it Friday? (No new code on Fridays!)

Having to meeting with not only other members of your own group but also members of other groups meant you had to have answers to all those questions ready to go. Planning mattered. You quickly learned that any changes you made could impact a dozen other developers who don't necessarily know anything about your part of the system.

The others weren't antagonistic by any means -- we were all on the same team, so to speak -- so planning meetings were opportunities to learn and suggest better ways of handling contingencies and improve quality so they on-call personnel wouldn't get a page in the middle of the night.

My suggestion to you is put yourself into situations where quality matters. Join a development team, even if just for a year or two, that is doing mission-critical work. You'll learn a lot in a very short time.

share
add comment