views:

215

answers:

2

Hey guys, I'm very excited about how experienced I am in programming. The first, working program that I have written, was in 2004 with C. Since this I have tried many programming languages, now got stuck with php. Currently I'm working as a web-developer, and everyones pleased with the work I do. Except me :) Thats the reason why i want to know, how high my experience and my knowledge is.

Could you tell me, some tips, tricks, test, or anything, on what I can see how much I need to learn and practice to get a mastermind in programming? (at first place in php)

+13  A: 

I'm also a programmer who doesn't like to stagnate, so perhaps I can offer a few tips:

1) What's your weakest area? Networking? Graphics? Regex? What is the one area that if someone asked you "I need a program that can do X" and that X scares you what is it. Now study as much as you can on that subject. Hack out a few prototypes and make it so that you understand it allot better. I used to hate Regex commands, now I use them whenever I can.

2) Study "different" languages. I'd recommend learning a "functional" language such as Erlang, Lisp, or perhaps certain aspects of Python. Get a book on "functional programming" and read it through, and then think how you can apply these concepts to your current work. Start using map() and filter() in python instead of for loops, etc.

3) If you're doing web programming, get yourself a massive set of data and start doing some number crunching. A while back I was playing EVE Online, so I fired up SQL Server Express and hacked out some market analysis routines in it. It was around 4 GB of data the server crunched through, but I learned allot about SQL Server in the mean time.

I recently was watching a lecture on Lisp and the Professor said: "Computer Science is not about computers and not about science. It's about knowledge, and how to manipulate that knowledge to obtain more knowledge" So true, so the more tools you have for manipulating and gaining knowledge, the better programmer you'll be.

Timothy Baldridge
Thank you! This is very informative and finally it gave me a hint. I know that there's still a lot of room for improvement :) +1
Nort
This is a great answer. +1
Markust
+3  A: 

Start a new programming project and take your time to make every single aspect of it as good as possible.

  • Use git or Mercurial for source control. Use submodules (or whatever the Mercurial equivalent is) to manage external frameworks. Set up post-commit hooks to run your unit tests and zip up your executable. Use new branches for everything and do octopus-merges to get them all back into a single branch.
  • Script everything you do. Deploying a new version of your app (including website updates!) should be as simple as running a single script.
  • Make your app 100% localized. Deploying in a new language should be as easy as sending a strings file out to a volunteer to get translated, then popping that translated file into your source code, no additional work needed.
  • Optimize, optimize, optimize. Spend the extra week to make your app load 100ms faster.
  • Refactor, refactor, refactor. Don't just go for orthogonality and abstraction, aim for pure code beauty. Using your classes should be like using Duplo blocks, they just snap into place with not an error in sight.
  • Unit test everything. 100% coverage. Don't let a single regression go unannounced. Automate the entire test suite so that you can't promote your code without all the tests passing.
  • Put your app in the cloud. If you're writing something for the desktop or a mobile device, give your users a way to sync their data to a website. Write that website. If your project is web-based, give your users a mobile or desktop front-end to access their accounts.
  • Accessibility. Handicapped users should be thrilled with the care you put into designing your app.

Keep in mind that if you do everything I listed here, you'll never ship, but you'll be a well-rounded a developer, an asset to most any team.

kubi
I'd agree with most of this except "Optimize, optimize, optimize." Premature optimization is the root of allot of evil. Until you do everything else on the list above any unnecessary optimization is a waste of time, and introduces many more issues and errors into the code that have to be tested, debugged, and fixed. As long as your program doesn't have glaring speed issues, optimization is causes more problems than it fixes.
Timothy Baldridge
@Timothy I agree in a real life situation, but the intent of my post was to combine a bunch of skills into one project. It's not likely that any particular project needs a lot of optimization, but being able to speed up an algorithm without introducing bugs is an important thing to be able to do.
kubi