views:

1041

answers:

13

This isn't strictly about programming, more about being a programmer, so I'm sorry if its not the right kind of question to ask on this forum (mod, please delete if it isn't)

I'm a computer tech in the US Army, and once I'm out I'll have eight years on the job. I'm about to start a degree through an online school (the only way I can get the army to pay for it while I'm still in), and I'm seriously looking at getting a computer science degree.

I'm great with computers. I can take one apart and put it back together with my eyes closed. I'm A+ and Network+ certified and I'm getting a couple other CompTIA certs before I get out. I can work Windows as well as anyone on this planet and I'm not terrible with Linux. A job in computers is something I've always wanted.

But, aside from being a computer technician, it seems that every job in the field requires programming ability. I like programming as a hobby. I programmed TI BASIC in high school and I'm teaching myself Python, but that's as far as my experience goes. That sort of brings me to my questions:

  1. I've always heard that the first language is the most difficult, and once you learn it well then all the others sort of fall into place for you. Is that true? Like, if I spend the next eight months mastering Python, will I pretty much be able to pick up at least fair proficiency in any other OO language within a month of studying it or whatever?

  2. How easy is it to burn out? the biggest thing I'm afraid of is just burning out on programming. I can go all day long if I'm programming strictly for my own personal desire, but I can imagine it being really easy to burn out after a few years of programming to deadlines and certain specifications. Especially if its a big project involving a dozen different designers.

  3. From what I told you about myself, would I already be qualified to work as a regular technician (geek squad type or maybe running a computer repair shop).

  4. Is Python a good base to learn from? I've heard that it makes you hate other languages because they feel more convoluted when learning, but also that its a great beginner language.

  5. If you're a professional programmer, did you have any of the same fears?

  6. Would you recommend that I stick to computer repair and Python rather than try to get into corporate programming? (just from what you've read in this thread, anyway)

Thanks for taking the time to read all this and answer (if you did)

+2  A: 

The classic route to professional software engineer is via a Bachelor's in Computer Science (or Software Engineer, but that specialization is rare), with internships your sophmore and junior summers. You are qualified to start the BSCS and do well.

The first language is mindblowing hard and frustrating, the second language is relearning how to think, the third language is fairly trivial.

Regarding Python, it's an acceptable first language and not to be sneezed at. For completeness, you will want to know Assembly/C/C#/(one of F#, Haskell, a Lisp) by the time you go job hunting.

I'm not a Python expert, so I refuse to comment on whether its OO facilities are up to snuff.

Computers will always need fixing. You may find a niche in the IT/IS world of highly qualified system support more to your current skills. ( www.serverfault.com is a good place to take a look at that part of the world).

edit:

The basic qualifier is desire and your ability to grind through the hard stuff and get to the soft and chewy layers. It's a job, it's work, it can be fun, but at the end of the day, work is always work. Do you want to do this work or some other work? Only you can answer that.

Paul Nathan
+2  A: 
  1. Yes. You will learn new languages easily after that. You can learn your second language in a month or so, if you have some interesting task to do in that programming language, otherwise you could spend years and just not getting it ( that's my personal experience ) .

  2. Varies from each individual and with age. :)

  3. Yeap, but I ( subjectively speaking ) would try to get into the programming world instead

  4. Well you could start learning BF and love anything that comes after that. I think Python is great to start with, but yeah probably anything after that will feel too verbose.

  5. And many others

  6. goto my answer on 3

You're welcome

OscarRyz
your comment has unreachable lines.
Erich Mirabal
+5  A: 
  1. The first language is certainly the most difficult since you also need to learn the concepts along with it like arrays, collections of objects and program flow. The second language you learn has lots of "Oh, it's like this from language one except with minor difference"

  2. I couldn't imagine myself burning out programming, but that's probably because I really enjoy it and I've developed a method. I'm constantly drinking water or tea and if I don't make any progress (ie: I'm stuck) I take a break and try to forget about what I'm coding. The problem will be more clear when I return.

  3. Having studied A+ and Network+ myself, I certainly would say you have the skills to run a repair shop or be a general PC technician.

  4. I haven't learned python yet (I'm planning to soon), but from what I've read about it, it's a powerful object-oriented language that has lots of modern features. So I would expect it do be a decent start. I personally started with Java in the 90s later learned C/C++. I think learning one of Java, C# or C++ (no specific order) is important as a programmer, just because they're the most popular languages currently.

  5. I was lucky and knew I wanted to code since I was in grade school. So I can't say I've had the same anxieties as you.

  6. Before making that decision, you should learn to code. Once you start getting into it you'll see if it's a good fit for you. I would look for tech work and spend down time or personal time learning programming. If you like it more than repair, then take the dive.

My background: I'm a computer science major with a software engineering concentration at the University of Waterloo in my last term. I'm currently in the latter stages of interviewing with Google and Amazon. I've had the equivalent of 2 years in internships at RIM and Sybase and a few other development companies.

Ben S
I'd disagree about the first point - if your first is Python and your second is C, that's going to be much harder. Dealing with memory management and pointers is going to be a major impediment. The rest of your response is +1 :)
Dan
Yes, jumping from python to C would be a shocker, but it would likely be easier than learning C without prior programming knowledge.
Ben S
+18  A: 

the first language is the most difficult,

The first anything is most difficult. Try to switch from skis to a snowboard.

if I spend the next eight months mastering Python, will I pretty much be able to pick up at least fair proficiency in any other OO language within a month of studying it or whatever?

A month? No. Eventually? Yes.

How easy is it to burn out?

It's a job. How easy is it to burn out at any job?

Is Python a good base to learn from?

It makes you hate other languages because they feel more convoluted when learning.

So? It's a job. Every few years there's a new technology that (a) you must learn and (b) doesn't compare well with any previous technology.

Bummer on that. After 35 years of programming, I can only say that you're right. Everything new is bad and everything you already know is better.

If you're a professional programmer, did you have any of the same fears?

No. None of the things you've mention matter much at all.

Be afraid of criminally mis-managed companies going out of business. That's something to be afraid of.

Afraid of a new technology? Please. Dive in. Get a job. If you don't like it, build new skills, get other jobs.

Would you recommend that I stick to computer repair and Python rather than try to get into corporate programming?

Again, it doesn't matter. 30 years from now, none of this will exist and we'll all be programming with languages that haven't been invented yet on user interfaces that don't even exist in movies.

When I started, we punched our programs on paper cards. Really.

If you fear the future, you fear life itself. Don't worry. Build new skills as quickly as you can.

S.Lott
Given that people are still programming in C and Fortran and COBOL and Pascal by writing code on keyboards, I very much doubt your 30 year forecast...
Michael Borgwardt
@Michael Borgwardt: You are free to program by punching paper cards. If you can find any device that still makes them or reads them.
S.Lott
+1  A: 

It sounds like you could already get a job in a repair shop, or in a large company's IT department. From there, there's always potential to move other positions.

I'm a software developer myself, and I can understand the fascination! Python's a good language to learn - it's relatively easy to learn, and you can become useful quickly. If you want to become a seasoned developer quickly, I'd suggest learning something much harder for your next language - C, then C++. They are much lower level than Python, they do less work for you. This makes you less productive initially, but it means that they run much quicker. From a learning perspective, they will force you to learn more about how computers actually run programs, which will make you a better programmer.

Most importantly, you already have something you can't buy or learn. You are passionate enough about the field to learn how to program in your own time, and you care about doing a good job. That gives you something that (sadly) many professional developers no longer have.

Good Luck!

Dan
+2  A: 
  1. Learning any language helps in picking up subsequent languages, but each one has its own advantages and disadvantages that will take time to grok. The best thing you can do is try to pick up as much experience in as many languages as you can. You'll certainly burn out unless you have a purpose for learning each one, so don't take on twenty at once and with each you learn make sure there's a reason behind it (e.g., learning JavaScript so you can develop an AJAX-based web page.)
  2. You tolerance to burn out is directly related to how motivated you are for the project you're working on and your intestinal fortitude in slogging past the parts of the project that aren't that interesting for you. I find during those latter phases I'll instinctively adopt pet projects to keep myself from getting bored to death, which definitely helps.
  3. I'd imagine you're qualified, but those careers are somewhat unrelated to software application development. My recommendation would be to try and find an entry level job that actually involves programming; if you enjoy computer science I think you'll find it much more satisfying overall.
  4. I got started in BASIC, then quickly migrated to C and C++, then branched into whatever I needed to learn to get the job done. My suggestion (somewhat related to answer #1) is that wherever you start you keep going. Don't "judge a language by its cover", so to speak; rather learn it for yourself and draw your own conclusions about how much you enjoy/despise it.
  5. No real fears; the truth is that companies love to find, hire and retain top developers. As long as you love software development, that will reflect in what you produce which will get noticed by someone looking to hire.
  6. I'd try a phased approach. Start a pet project of your own, learn Python, get comfortable with programming, and see how much you like it. I think the best person who can answer the question you've posed here is yourself; start small, and if you like it, get a little bigger. From there retreat or advance until you're confident one track or the other is where your true computer passions lie.
fbrereto
+1 for pet projects! Lifesavers they are...
Chris Knight
+1  A: 

1) Yes, learning your first language will be the most difficult. It will definitely be easier to learn future languages, although it will still take some work.

2) I went to college and received a degree in Computer Science and have been a software developer for over 8 years now. I'm in no way burned out. Just the opposite… feels like I'm entering my prime :-)

3) Absolutely, you're ready.

4) Yes, it's just good you are learning an object oriented language. Most job openings I see are for .NET or Java developers… both object oriented languages.

5) My biggest fear was I wouldn't be "good" enough of a programmer when first learning. Let's face it, programming can be a complex world, but fun. We all have fears. If you enjoy programming and you are self-motivated, you will be successful.

6) You should do what you enjoy the most. For what it's worth, you will most likely get a bit of a fatter check developing software compared to fixing computers.

ChrisNel52
+2  A: 

Programming is a fantastic choice, to a lot of people it will seem geeky and dreary, but it is a job where you never stop learning.

Having said that (and not wanting to repeat what others have already said), if you are looking to get into a corporate, then you have to be prepared to do your time - you'll likely have to start at the bottom on a crap salary and do a few years before the money becomes good.

Your background in networking and building is going to be very good though, it is going to make you a very well rounded developer because you have understanding of concepts outside of the normal programming world.

slugster
+3  A: 

Peter Norvig, head of research at Google, has a great post on becoming a professional:

http://norvig.com/21-days.html

Here's a few of the main points from his from his article (direct quote, Peter's words):

  • Get interested in programming, and do some because it is fun. Make sure that it keeps being enough fun so that you will be willing to put in ten years.

  • Talk to other programmers; read other programs. This is more important than any book or training course.

  • Program. The best kind of learning is learning by doing. To put it more technically, "the maximal level of performance for individuals in a given domain is not attained automatically as a function of extended experience, but the level of performance can be increased even by highly experienced individuals as a result of deliberate efforts to improve." (p. 366) and "the most effective learning requires a well-defined task with an appropriate difficulty level for the particular individual, informative feedback, and opportunities for repetition and corrections of errors." (p. 20-21) The book Cognition in Practice: Mind, Mathematics, and Culture in Everyday Life is an interesting reference for this viewpoint.

  • If you want, put in four years at a college (or more at a graduate school). This will give you access to some jobs that require credentials, and it will give you a deeper understanding of the field, but if you don't enjoy school, you can (with some dedication) get similar experience on the job. In any case, book learning alone won't be enough. "Computer science education cannot make anybody an expert programmer any more than studying brushes and pigment can make somebody an expert painter" says Eric Raymond, author of The New Hacker's Dictionary. One of the best programmers I ever hired had only a High School degree; he's produced a lot of great software, has his own news group, and made enough in stock options to buy his own nightclub.

  • Work on projects with other programmers. Be the best programmer on some projects; be the worst on some others. When you're the best, you get to test your abilities to lead a project, and to inspire others with your vision. When you're the worst, you learn what the masters do, and you learn what they don't like to do (because they make you do it for them).

  • Work on projects after other programmers. Be involved in understanding a program written by someone else. See what it takes to understand and fix it when the original programmers are not around. Think about how to design your programs to make it easier for those who will maintain it after you.

  • Learn at least a half dozen programming languages. Include one language that supports class abstractions (like Java or C++), one that supports functional abstraction (like Lisp or ML), one that supports syntactic abstraction (like Lisp), one that supports declarative specifications (like Prolog or C++ templates), one that supports coroutines (like Icon or Scheme), and one that supports parallelism (like Sisal).

  • Remember that there is a "computer" in "computer science". Know how long it takes your computer to execute an instruction, fetch a word from memory (with and without a cache miss), read consecutive words from disk, and seek to a new location on disk. (Answers here.)

Shane Cusson
For every fun programming position there are 10 not fun at all positions. This guy is in a military, so I would expect him to plow through stuff even if he does not always love it. About burning out - try not to work with idiots. Try not to work at a place that outsources to India aggressively. Try working 45 hrs per week - no more and no less. No weekends, but no 9-5 either. Speaking of which, I would have my eyes on Raytheon if I were you. They love ex-military; it would be easier to get in. Try not to work too hard in the first 6 months / year. You will kind of suck initially. Expect that.
Hamish Grubijan
+1  A: 

There are already some sensible replies. Rather than repeating them, I just want to point out that a good computer science program will expose you to a lot of different topics. It would be great if you can find an online program that has CSAB accreditation as the standards they lay down for what must be included are all very sensible. Learning python on your own is a great start but there are a lot of topics you might not think to learn on your own that are key to becoming a really well-rounded developer, such as:
Computer Organization
Operating Systems
Numerical Analysis
Analysis of Algorithms
etc

frankc
Why Numerical analysis? I have so many coworkers who are great coders but sick at math.
Hamish Grubijan
@hamish Numerical Analysis is essential to understanding how floating point math works on a computer. If you have ever used float or double, you will benefit from the insight, regardless of how complex the actual mathmatical calculations you are making are.
frankc
+2  A: 

1) Additional languages will come more easily because in many ways they are really just syntax wrapped around programming concepts. Once you understand the concepts, the rest is about understanding the nuances and syntax of a language which becomes easier which each language as the concepts don't really change much between languages so there is less to get in the way of you learning the syntax.

2) Burn out will depend on a lot of factors, but I rarely find myself burning out on programming. As a programmer, there is always such a variety of things to be done that it can be a very varied job. Also consider that unless you are programming by yourself, it is a very interactive job with continual communication between yourself, other programmers, and the business people who require your skills. What stops me from burning out is the amazing amount of things to be learned and play with in the programming world :)

3) It certainly seems like you are well qualified to do such a job. However, the more pertinent question is, is it what you want to do?

4) I'm not a python expert, but I do know a little bit. Every language has its nuances, and python is no different. I think its a reasonable choice for learning to program and being an expert in it will set you up well to learning other object oriented languages. If a career in programming is something you are seriously considering, then Java or C# may be better choices as these are the two most common languages used in the corporate world. They are also very close syntactically as well.

5) As a junior programmer I did worry about burnout and 'is this the correct career choice', but this didn't last very long as I realized for me that I love programming and that the sheer wealth of things to learn and apply keeps me happy and occupied. Sure, I have lousy days at work where I'm totally sick of what I'm currently working on, but these are rare and I really value all of the varied opportunities and challenges that come with being a programmer.

6) Well, is programming right for you? That's only for you to answer, but some questions you might want to think of: do you enjoy programming more than hardware? Are there other ways to employ your hardware talents other than repair? For example, would you enjoy electrical engineering (where you could employ both your hardware talents and basic programming skills simultaneously)?

At my place of work anyway (large financial corporation) it seems to me that there are more opportunities, varied and interesting work available for programmers than computer technicians, but this is probably my own biased view :) Go with your heart, the rest will follow.

Great questions, and best of luck in your search.

Chris Knight
+2  A: 

First off. I think it would help if you some context was provided in terms of experience. I am a Technical Manager with 20+ years in various technologies, but my passion is in User Interface and I am currently working on a project developing a Flex Application.

Now on to the my input.

1) You want to start with a structured language that provides free tools. Java is a good one in my opinion. If you want to make a career out of this and it sounds like you do then a degree is a big plus. I don't have any Python experience but from my experience it usually is not held as a good learning language.

2) Depends.. I have being doing it for 20+ years. As I have told many people, find your passion and follow it. Of course being smart about your choices plays a big part, but if you want a chance and longevity then having passion in what you do is a big part of it. If you are already questioning the possibility, do more research and find an software area that you really like and work towards learning all you can around that area. (For me it was UIs).

3) Geek squad is not what software development is about.

4) In my opinion.. I would start with Java.

5) Nope. I have gone from Pascal to C/C++ to Java to Flex. For people with a open mind and flexibility there are a opportunities in the field. The biggest fear that most developers have is offshore. Definitely a fact of life and most frustrations around my career are totally outside of actual coding. It is the process and how it works with a business that usually draws the most pain.

6) Find your passion and Follow it. It gives you the biggest chance for success in my opinion. Oh.. and be realistic. I wanted to play baseball, but for me was not realistic.

WeeJavaDude
FYI: some schools use Python as a starter language, notably, MIT.
Paul Nathan
A: 
  1. Like someone said, the first anything is difficult. Programming is no different, and it may take a while for you to wrap your head around it. Things slowly click into place though.
  2. Can't answer this one
  3. Most likely. Working for the army sure looks good on a resume.
  4. I hate it because once you look at other code, it makes you barf. Learn something like C#.
  5. N/A
  6. It sounds to me you'd rather fix computers. I guess you could program as a hobby and later become a developer, but that takes time.
DMan