Ok so I decided to write about this topic while its fresh in my head, This is sort of out of the ordinary of my regular posts, but I am enjoying the idea of this post so much that it will probably happen more regularly in the future.
So, the goal of this post is pretty much to hopefully enlighten everyone about Computer Science and what it really means to be a GREAT programmer.
This is a rant with lots of great resources listed at the end for further reading in Computer Science, Programming, and Development.
I feel like there is a lot of confusion in general about Computer Science and what it is, and especially, where to start. You hear this term all the time, usually when someone is talking about college, and majoring in Computer Science. You may even THINK that you know a lot about, and then start to look into it further and realize that is a big scary thing, full of big scary words.
Quick explanation of where I am coming from and my experience with Programming
Having said all of that, several months ago I Thought that I was pretty in tune with Computer Science and all of the ‘surprises’ were behind me.
Oh Andy, You are not a Jedi Yet. (Yes I referred to myself in the 3rd person, AND used a star wars reference in the same sentence. I’m sure all the ladies have officially stopped reading.)
So several months ago I was introduced by a friend to Facebook Puzzles – These are programming/engineering questions created by Facebook to completely crush your brain, they also use these as a recruiting tool for their engineers. If you answer 2 of these correctly then you are eligible to be contacted by a recruiter of Facebook, and then potentially you could be hired.
But most people do them for fun, so I figured i’d take a crack at them, how hard could they really be eh? I thought to myself. I went into it pretty confidently, then quickly realized that they were pretty freaking hard. They are really focused on the ‘problem solving’ aspect of programming, the situations are completely made up, as well as the results.
There are several different languages you can use, I chose PHP, of course. I was able to complete Hoppity Hop! and Meep meep! relatively easily, later to find out by scouring the Puzzle Master Discussion Forum that those were ‘practice’ to make sure you formatted your code correctly.
More bruises to the ego, but I pushed forward 🙂
It was at this point when I had a revelation, I was a GOOD Programmer that had gotten sidetracked from the ultimate goal at hand. That goal is to be a GREAT Programmer, among other things of course.
I am self taught in everything that I do now professionally(and often take pride in that fact), meaning that I have not really had ‘formal training’ in design, development, or programming in the traditional sense. I often advocate that college courses, while effective, are extremely overrated for most professions, and are often, definitely not required to succeed in your career (Of course there are exceptions, like doctors, they have to get their PhD).
So while being self taught has its advantages, it can also leaves you with some things that you may need to go back, and do further research on at a basic level to get the complete grasp of the concept from the ground up.
For example, when I was going through the Facebook Puzzles I was running into a lot of talk about Big O Notation and Algorithms in General. Needless to say I know a lot more now than I did when I started looking at those things, and I am excited about that fact. Its good to constantly be challeneged, and have to take a step back and re-evaluate yourself in order to take that next step forward, and continue learning and doing the best that you can do at something.
A lot of what I have been learning over the past few months deals more with traditional ‘software engineering’ BUT since the ‘trends’ are becoming more WEB Focused we are going to be seeing A LOT of these Computer Science methods being implemented on the web, because the ‘software of the future’ is Web Applications.
I have often read that in order to be an efficient programmer you need to Start with, or Re-visit the C language, because that is as close as we can get to the hardware of the computer without going into the Assembly Language. While these languages are VERY old, we can learn A TON from them in the aspects of programming good code and completely understanding it.
So where do you start to learn Computer Science? You can either go back to a school for computer science or one of the many online schools out there. Or Read on, and hopefully some of these resources will definitely help you out, or point you in the right direction, or make you realize that you should pursue a different dream.
The First Resource
I stumbled upon several months ago, It’s a great post with 27 Computer Science Resources for Web Developers, While I completely disagree with the opening statement that says “If you don’t have basic knowledge of computer science paradigms (big O notation, algorithms, data structures, databases, hardware theory, etc), you will not make it as a Web Developer.”. The post contains some Fantastic resources, mainly links to some (laughably designed) websites of the top university courses in the country for Computer Science. These links make for a great start at blazing your trail into Computer Science.
While being well versed in Computer Science is extremely helpful, it is by no means going to keep you from being a successful Web Developer. Heck, I know tons of Web Developers that are ridiculously successful and can’t begin to write you the first line of PHP, or even tell you what PHP stands for.
Which brings me to my next point, PHP is by no means the only Programming language, or Web programming language out there. There are tons. I found this post(10 Programming Languages You Should Learn Right Now) that is pretty helpful in explaining some of the top programming languages of the past few years, and can be a good resource in choosing a language to learn if you are having trouble deciding.
All programming languages are very similar, its mainly a syntax issue among other things like speed, memory usage, etc, that seperate the languages. It is always good to master at least 1 language before moving on to the others to keep yourself from being confused. But once you choose a language to start with, there is of course a plethora of free information about all programming languages floating around on the internet, like this huge post of free book resources.
Now don’t get me wrong, Its very important to learn as much as you can about Computer Science, its Theory, and the actual Programming Languages and Syntax, but there is so much more to being a GREAT Programmer.
There is some Good Advice for Computer Science College Students in this post, which leads me to my next point.
Programming in general has to deal a lot with your Mindset, and HOW you program just as much as WHY you program. You have to focus on the Core Processes, and create software that’s easy to work with and good for your users.
A MUST READ Programming book has to be the legendary Pragmatic Programmer, This is just one of the best programming books to read as a beginner to get your mindset straight.
That writers of that book also have a ton of other awesome books and resources at their website.
Now turning more back to the web, which is ultimately where we want to go in the future, I am sure you have all heard of a little company called 37Signals.
I am a big fan of 37Signals. Huge fan in fact. I think that their ‘Keep it simple’ Methods and Streamlined approach to programming is exactly what we will all be doing in the future to produce quality web applications and websites.
Another MUST READ in my opinion for anyone Developing Web Applications is their book (you can purchase it, or read it online for free) Getting Real. When I first read this book, I was astounded at how on point it was all the way through. It changed the way I program things, and the way I THINK about programming things. It also helps you to think more clearly about what you need to add, and what you shouldn’t worry about adding to get something live in a decent time frame.
I also enjoy watching the guys at 37Signals speak at events, If you want some great motivation and insight into their way of doing things, you can check out a bunch of their keynotes here.
Well, thats it for this rant/enlightenment session. I hope I didn’t lose or confuse anyone in anyway, I hope I helped some people find their starting point, or help them on their way to finish their Computer Science Journey. That was my goal at least :).
In closing I would like to leave you with…
a few points from ME that could help you get started.
Dive in, and most importantly, Have fun.
If you are not passionate and excited about learning all the nerdy things that come along with Computer Science like Algorithms, and problem solving, then maybe its just not for you. If you aren’t passionate about it, you will hate it.
Be patient, it takes time to learn this stuff, it definitely requires a ‘shift in thinking’ or a different ‘mindset’ than you may be used to.
Find someone who already knows this stuff, like a Mentor, to ask questions to help you when you get stuck, because you WILL get stuck. This would help you understand why you are stuck faster, so you can get over it and move on to the next obstacle.
PRACTICE. If you do not practice it, you will not learn it. Mark my words. You can read it all day, every day, for the rest of your life, but if you never try to run your program you will never get it right. It takes a lot of trial and error.
NEVER, EVER, Stop learning. You will never reach the point where you ‘know it all’, technology changes at the speed of light – always keep moving forward, keep an open mind, and achieve goal after goal and before you know it, you will be able to look back on a lifetime of achievements and successes.
Well, I hope that was insightful, Please leave some comments, or Questions and hopefully we can get a little discussion going, If you know any great resources for Computer Science, or Programming in general, please leave a link in your comment. And as always, if I said anything incorrect or if you see anything wrong at all just point it out and i’ll get it fixed immediately.
Thank you everyone for reading 🙂