Tag Archives: Web Developer

computer science degree

Hope for Non-CS Majors Learning to Program

I don’t have a computer science (CS) nor engineering degree. I didn’t drop out of college or skip it all together because I was buried in lines of code working away as a developer. It’s the reality of my background.

As a result, I’m certain there are important technical aspects of software development that I don’t understand. In fact, I would bet there are technical aspects of computers and programming that I don’t even yet realize that I don’t know about.

And the truth is that I’m okay with it. After starting to program, thoughts of being in over my head crept in. How could I possibly get my programming abilities to be equivalent to an entry-level developer? But that’s no longer the case. I’ve come to terms with the fact that I’m a non-CS degree web programmer.

Are College Degrees All Hype?

There has been lots of noise the last few years about college debt and people bucking the college trend (“college is for suckers”). So you might think I’m better off. Well, don’t take these stories as the almighty truth; in fact, you can chalk up the uncollege movement to PR fluff.

I’m not saying that this movement doesn’t have valid arguments and dedicated, intelligent individuals working to disrupt an educational industry desperately in need of it. But, if you want to gain professional employment as a developer today, every job description will mention requirement of a CS degree or equivalent experience (EE). Perhaps employers in the future will catch up to speed with the trend away from college degrees, but not yet.

Interestingly, spending four years in school doesn’t necessarily prepare you as a programmer on Day 1. The degree is often used as a ‘stamp of approval’ to indicate you’re capable of learning new, complex material. Ultimately, your skills at development boil down to time invested in honing the craft.

Succeeding Without The CS Degree

A computer science degree will make it much easier to get your foot in the door with employers, but you can still do it without one. If you’re in the same boat as me and a CS degree is not an option, you’ve got to take other avenues in order to gain more experience.

If You Build It, They Will Come

Nothing speaks louder about your abilities as developer than demonstrating the code you’ve created. Create your own apps and contribute to open source. It will enhance your abilities and open doors within the developer community.

Or you can go the route that Bryan Helmig and the other Zapier cofounders took. None of these guys have a CS degree, but they’ve built a budding SaaS business, gained customers, and were accepted and successfully completed YCombinator. Bryan’s own words on the experience  are worth the quick read.

Ignore Formal Job Descriptions

If running your own company is not your fit, there are still many great opportunities. If you’re a self-taught programmer, than you’re incredibly self-motivated and driven.To find an employer to hire you and give you experience, you’re going to have to harness that same spirit.

Take that same drive and apply it to convincing a person to hire you. You’re not going to woo anyone on paper with your resume; you’re going to do it in person. Look for companies that are hiring entry-level engineers (<2 years experience) and network with their current engineers using LinkedIn or better yet at local meetups. Also, look for companies with multiple open engineering positions; companies in need of talent will be more likely to place a bet on hiring you on the cheap in order to develop your skills further.

Non-CS Majors Learning to Program Conclusion

Whether you have a computer science degree or not, learning to program requires much hard work, determination, and perseverance. Be prepared that if you don’t travel a traditional route, you’ll need to hustle a little bit harder to create your career path.

UPDATE:  Join the discussion on Hacker News.

bridge support

Learning to Program Supporters

“It Takes A Village to Raise a Programmer” – I just made that up for this post.

So yes I did fabricate this quote for my own purposes. But it seems to fit my situation well, as I truly have been the benefactor of tremendous support and efforts of many. And as those of us in the US settle into our annual time of thanks, I feel incredibly grateful to everyone who has shown me support.

Heading down this path to learn to program required a strong leap of faith, and I don’t regret it for one second. That’s not to say it’s been all positive; in between learning and building, there have been times of stress and frustration.

But the support of everyone from family to complete strangers has been overwhelming. It’s great to know there are people pulling for my success.

Tweet of Support

I’ve placed the following tweet on this site from the beginning. An amazing number of people, many strangers, have sent this tweet out to support me.

“I support @andrewkkirk on his journey to go from total noob to programmer in 18 weeks.” < Tweet This Message >

I send a big thank you to all of you that have taken time to support in one way or another. Theses gestures mean more to me than you could imagine.

The Importance of Sharing

Once I made the commitment to learning to program fulltime, I knew it would also be important to write throughout my entire process. My hope is that others will benefit through documenting my experiences, and even avoid certain pitfalls by avoiding my mistakes.

An additional result, which I didn’t anticipate, is that I’ve reconnected with people who find out about my project from social media. For example, I recently received this note from a high school soccer coach I hadn’t spoke to in several years.

I just read most of your blogs on your page about learning to program. I wanted to let you know I am proud of you for taking this leap. Good luck and I know you have the determination and commitment to get it done. I look forward to hearing about your progress. Take care.

Isn’t the internet incredible? Of course, if I hadn’t written about my process and widely shared it, I wouldn’t have had this benefit.

“On-Call” Support Team

Finally, I’ve add several people take time out of their busy schedules to support me by meeting up to pair program with me, discussing code on skype, and answering questions when I inevitably break something. These folks have gone above and beyond, all in the name of helping a fellow developer.

Remember to be thankful not just for those family and friends close to you, but also to those people that make a subtle impact on us. Without their support, I wouldn’t have made it this far. Thank You!

group learning to program

The Power of Group Learning to Code

I was in San Diego this week and a friend invited me to attend a San Diego Tech Immersion Group (SDTIG) meeting. It’s experienced computer programmers who want to learn new technical skills.  I was struck by the unique group learning to code environment being fostered by the group.

The group consists of 3 developer leaders/mentors and approximately 100 developer participants, who follow a new learning track every six months. The Fall 2012 track is focused on web development (HTML/HTML5, CSS, Javascript, JSON, and JQuery). Monthly, each member completes the same reading assignment from a book for the current technology and the topics are discussed in a more detail during monthly meetings.

Here are few amazing features of this group learning:

Learners Helping Learners

Members help each other overcome stumbling blocks while learning new technology. In addition to the monthly meetings, there is a forum for group discussion. Because each person is going through the same track, there’s great opportunity for collaborative learning, members jump in to help when they understand the material.

Expert Mentors as Guides

These mentors serve as an expert resource for the group. More than just subject-matter expertise, these mentors also plan the learning schedules, select the materials, and determine an appropriate learning pace.

Learning isn’t easy and creating a plan to learn a foreign subject is a challenge. These experts greatly reduce that burden.

Social Pressure = Accountability

This aspect was never directly mentioned during the meeting, but I couldn’t help notice it. There’s no financial cost to join the group, but by actively choosing to participate in a group environment, there is a social force at play. You don’t want to fall behind so you complete the reading and come prepared to discuss.

Conclusion

I’m always on the lookout for new and interesting resources for learning to code. The SDTIG was a new experience and not like anything I’ve come across locally (if you know of something similar in LA, let me know).

There are characteristics of a traditional classroom setting, but there is much more collaboration amongst the members. Also, members complete individual learning, but it is in a structured, expert-guided fashion. This mix and match of learning styles, guidance, and support are great for beginners learning to code.

featured image courtesy of UBC Library 

email mac

4 Factors Crucial for Choosing Your First Programming Language

In creating my plan to learn to code, I made the decision to learn Ruby. The first programming language is a very important decision and one that I didn’t take lightly. Below is the process I followed to make this decision.

First, a bit about web technologies (you can skip to the 4 factors if you’re familiar with web technologies click here). If you’re like me, someone without a technical background, you’ve been amazed by a first-hand experience with an amazing web application.

While that amazing web app is a cohesive product, it’s important to understand that there are several layers or tiers of functionality you’re experiencing simultaneously. Before you choose your area of study, consider how each of these areas apply to you.

Tiers of Web Functionality

  • Graphic Designer – This person creates the visual aesthetics of an app, including colors, logo, and layout. The graphic design determines the immediate impact felt by users and the mood conveyed by a site. Graphic design isn’t truly a web development tier, but I think it’s important to recognize because of its impact on users.
  • Web Designer – Using primarily HTML, CSS, and JavaScript, the web designer brings a web app to life and makes it interactive to the end user.
  • Web Applications Developer – This developer is concerned with the interaction between the client (web browser) and the application server.
  • Web Database Developer – In complement to applications developer, the web database developer ensures a smooth connection between the application server and the database.

Web Browser, App Server, and Database Diagram

Experts in each of these areas work collaboratively to execute a complete web application. In reality, most everyone learns skills across different tiers and it’s not practical to dedicate yourself to learning only one area in a vacuum separate of any others. But, you do need to select your primary area of expertise and that should the focus of your first programming language. This level of specificity will ensure you have a clear end goal and focus of study.

Once you’ve selected your tier of expertise, you need to select a specific language. Just like there are different spoken langues to express “Hello“, there are different tools and languages within your chosen area, each with pros and cons. I won’t start to name all the specific options, but instead show how you can evaluate these options and pick what programming language is right for you.

I selected the Web Applications Developer tier and then narrowed my language choices to python, PHP, and Ruby. Here is the process I used to evaluate different languages and decide where to start.

4 Factors for Learn to Code

#1 Executing a Prototype

You want to learn because you want to build something which serves a purpose. Your first development attempt will not bring you fame and fortune. But, you may build a prototype which either inspires someone else to work with you or to invest in your idea. How easily you can build this basic mode is a strong factor to consider.

Learning programming is a means to an end objective and getting outside support can expedite your process. Because Ruby has the Rails framework, I felt confident I’ll be able to get up a working prototype by the end of my 18 weeks.

#2 Learning Feedback

I’m part of the ADD generation. Our brains have been trained to expect immediate gratification. If you’re learning and there is large barrier to begin executing, it’s going to make the process more tedious. If you have the dedication, then more power to you. Be realistic about your expectations and commitment to your goal.

#3 Access to Mentorship

Don’t underestimate this factor. There are unlimited resources avaiable online and in books, but the talking with someone one-on-one is a huge help. Use meetup groups locally where you can meet web developers in your selected language. Developers were in you’re shoes once, and most are willing to help you. Even better, find mentor-specific opportunities to get involved with.

I was lucky to get connected with Tara Tiger Brown in Los Angeles and the Teach My Stuff program. Through this program, I’m working with Joe Goldberg, who’s Ruby expertise helped me plan my own learning program. We meet every two weeks and he’s available to answer questions when I need clarifying.

#4 Future Relevance

While not as important factor as the first three, it is still worth considering. Web development changes rapidly and you wouldn’t want to bank on what’s going to happen in the future. You should consider your future opportunities, both from a career standpoint and the type of projects you’ll be suited to work on.

For example, there are many people who have a passion for Latin and thus choose to learn what’s considered a “dead language”. But, your future opportunities if you learn a programming language that’s the equivalent of Latin will be diminished.

Conclusion

These are the factors which I considered when choosing Ruby. Do you agree or disagree with my reasoning? Are there factors that I didn’t include, which should be considered? Leave your thoughts and questions in the comments.

Update: Join the lobste.rs discussion here.