Computer Science, popular, Programming

Getting into Computer Science & Programming – Intro for Students, Web Developers, Designers & Self Teachers

2009-08-09_0323

intro-to-cs-190x407

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

Well to give you a background on me and my level of Programming experience, I have been programming in PHP with MySQL for several years now, I have even dabbled in C and C++/Perl/ASP etc. for the excitement of it all, because I find Programming, Math, and all that nerdy stuff extremely interesting now (I hated math in High School strangely enough). I specialize in Programming Web Applications and Dynamic Sites with PHP/MySQL/Javascript/jQuery/AJAX so I am confident in my skills as a Web Developer/Programmer and using somewhat complicated technologies and Programming to get the job done (Im getting to the point, I swear).

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.)

2009-08-09_0323-facebook

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

2009-08-09_0313

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.

Second Resource

10-programming-languages-to-learn-190x407

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.

Third Resource

345-free-programming-books-190x407

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.

Fourth Resource

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.

Fifth Resource

2009-08-09_0317

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.

Sixth Resource

2009-08-09_0318

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.

2009-08-09_0323

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.

First,

Dive in, and most importantly, Have fun.

Second,

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.

Third,

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.

Fourth,

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.

Fifth,

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.

Sixth,

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.

Conclusion

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 🙂

You Might Also Like

  • kate

    very informative and entertaining at the same time, i am just looking into learning computer programming and appreciate your knowledge and tips, thanks!! Kate

    • Thanks Kate! You are welcome 🙂 Appreciate the kind words and glad you stopped by! Good luck in computer science!

  • Caudill

    This is a fantastic post and I cannot wait to dive into all of the resources you’ve list. Thank you for putting this together. Do you have a recollection of the Computer Science Resources at the beginning of the post? It seems as though 21GunStudios.com is no longer. Thanks again!

  • herm

    So I’m about a year and a bit too late to comment on this post, but if you’ll forgive the necromancy, I found this really helpful.

    I’ve self-taught myself on and off some basic concepts as a hobby, but always found it hard to know where to truly get started in such a vast area of knowledge.

    These links are fantastic and have given me some definite pointers regarding what I should be aiming for.

    Thanks!

    • Better late than never 🙂 Thanks for the kind words and good luck on your programming journey!!

  • Thanks for sharing, interesting information on programming languages! Once a programmer, always a programmer! 🙂

  • First off, not all ladies stopped reading right after the Star Wars reference. I teach web design, and I make those remarks in class all the time!
    Second, I think you are right on point. I will be posting a link to this from my blog, and have already shared this with my students via Twitter and Facebook. Thanks for taking the time to put together such an exhaustive resource. I will be re-visiting this page often as I try to keep up with the current trends!

  • Very inspirational Andy. I am looking forward to read your tweets.

  • charan gp

    gr8 work..got confidence going through. thank u.:)

  • Great work! Thank you.

    To be completely honest, we might as well be twins. I had to laugh out loud a couple of times as I read your article (and I actually have my own office, so that must have seemed weird to my co-workers).

    Nothing new to say here, except: Thanks for the links and resources. When I interviewed with Amazon, they grilled me on a few “puzzles” that were of FB Hors d’oeuvre and Snack caliber. A little practice with some of those puzzles would go a long way — even if you only did it once a week.

    And especially if you’re self-taught, working with similar challenges over and over, and not having too much exposure to the other 90% of what’s going on in programming.

    Be well, do good work, and keep in touch!

  • You’ve left me speechless while reading your article. It’s really a matter of enthusiasm and understanding that you will never know even half of what the world has to offer. It’s great to see this passion on someone else 🙂

    It may sound strange but I am a medical student passionate for programming and arts, developing a new company from scratch with my best friend who is studying graphic design. We’re new and fresh, open to all that this fantastic world of technology has to offer.

    Thank you for sharing such insightful information and showing what computer science really is about.

    Cheers, and once again great post 😉

  • Andy is a veritable fount of knowledge and his
    lists of sites to visit is immense

  • Not sure if I’d classify as a “lady,” but I’m female and made it all the way through your article! Of course I majored in CS and minored in Math, so…

    Great article – thanks for the resources, especially the book link. 🙂

    If you’re enjoying the programming puzzles on facebook, you should try the ones at Project Euler (http://projecteuler.net/).

  • Very good post, Completely agree with whatever you say. One thing you forgot to mention is to follow blogs of GREAT programmers like uncle blob and the like.

  • Awesome post !! Your lines on “facebook puzzles” reminds me of the time I struggled with those (off course still !!). Thanks for your effort in collating all these references.

  • If you will discuss computer science i think you should mention international competition that new it people will face.

  • Great post Andy, inspirational and resourceful

  • Hey Andy,

    I read this article through Design Bump and I was pleasantly surprised to see my blog in your list! I haven’t updated it in ages (just finished up my MS in computer science, so I’m about to get back on the bandwagon) but I do have to touch upon something about web development.

    Web DEVELOPMENT is much different from web DESIGN. Developers create applications on the web using the same constructs as desktop software developers, but with the web as a platform. Knowledge of Big-O notation will help you understand the performance of the code you write, which is vital to creating fast, efficient web apps. Databases are the back-bone of all web data, so those are essential as well. Data structures and algorithms help you understand exactly how to choose the right tools for the job when implementing functionality to any application, be it on the web or the desktop. Perhaps modern web developers need not understand the inner workings of hardware theory, but all of the above-mentioned paradigms are vital to creating production-worthy web applications. I should know, I am a web developer myself, and I can’t imagine getting the job I have now without a solid foundation in basic computer science.

    • Adam! I am glad you came to give your 2 cents, since seeing your post again over the weekend pretty much sparked this post since I have been dealing with a lot more of this stuff lately.

      Congrats on getting your MS! Glad to hear you will be back to blogging soon 🙂

      I agree with what you are saying, having a background in Computer Science and hardware theory definitely puts you ahead of the game that most Developers play, but in the past few years frameworks have become increasingly popular in the Design/Development community. Which means that people that don’t know any lower level programming languages can most of the time ‘get by’ with using frameworks for what they need. I am personally not a big fan of using Frameworks all the time, except for jQuery for javascript, jQuery is really awesome lol. I feel that frameworks can save you time, but they can also keep you in the dark on how things work in the core language that the framework is taking care of for you. Its like riding a bike with training wheels to some people.

      But yeah I was referring to most of the Developers I know that are successful don’t build a whole lot of web apps, just regular sites that are somewhat dynamic sometimes. I totally agree on the web app development, without knowing the inner workings of the languages and hardware the quality of the app will really be lackluster.

      Good stuff, again thanks for stopping by! I look forward to seeing more posts from you :).

  • Dwyndal

    Moving from graphic design to soon coding, this should be fun and helpful. I remember back on my apple IIgs wanting to learn basic and later on C++ but never fully focused on it. I want to see what i can do not that i have the patience to sit and know i’ll have the time soon. Let’s see how my living experience affects my learning abilities. So far it’s helped me in my designing since i’m not classically trained.

  • Nic

    Andy, great write-up! Most of what I know is self-taught, which might be why I always feel like I’m lacking in my programming knowledge. I will definitely check out the resources you pointed.
    To anyone looking for a mentor, do yourself a favor and join a users group for the language of your choice. I belong to the Atlanta PHP UG and it’s amazing how accessible some of these programming rock stars can be.

  • Great article! I haven’t used C since high school. I remember always just wanting to use it to create imagery for games that my friends and I would code, but our teacher never showed us how. I guess that’s why I went more of the graphic design route.

    • haha yeah dude I hear that! Originally I wanted to develop videogames as well, but most video games are so huge these days there are like 1,000 people working on them (halo). I dunno but I always wanted to be able to build a really cool video game with just a few people lol, maybe one day 🙂

  • Nice article! Will give it a good read later. What I’ve read so far is near my experience with computer science.
    I also really like the updates on the site, new looks are awesome Andy!

    • Thanks Gaya! I appreciate it!! Still not done with redesign, but getting close :). Also, Yeah I still haven’t mastered the art of Computer Science, but it took me a while to get where I am now, and I figured it would help others to share that experience and the resources i’ve used to get to where I am 🙂

  • Yay! I’m a B.E computer science student too 🙂 I’m a programmer by what I learnt at my university.. but into design these days 😉

    • Nice Cheth! Yeah I am the same way, I am into both design and Programming, I love how they are both different but in some ways the same, keeps you from being bored 🙂

  • Absolutely excelent Andy.
    I am also self taught having done the sleepless nights learning php etc.
    However I am also going to be studying Computer Science at university come October so all in all I don’t think i could have planned to find a more helpful or suiting blog post on my RSS feed this morning.
    Many thanks for the post,
    Chris

    • No prob Chris! Glad you liked it! Yeah It takes quite a few sleepless nights to teach yourself programming, Good luck at the University! I am sure it will definitely be a fun experience!

  • A great insight on programming i know a little bit of c and html but a bit of a newbie in designing websites and am looking for a mentor to help me out, but i think i will use these resources to learn.