How far off am I?

19 points by mipnix ↗ HN
Hello-

Long time listener. First time caller...

After a fifteen year career as a pilot, I lost my job last year and can't find another one. I went back to school and am taking C++ and intro to databases and everything else I can get my hands on, in order to catch up.

I have no background in technology or business, basically a pilots license with a pretty degree attached to it. Nothing applicable to the real world. For all intents and purposes, I am starting from square one and trying to make my way as a programmer. After eight months, I don't feel I know how to actually program anything.

Entry level jobs are looking for 1-2 years of programming experience and mentors are hard to find.

Am I blowing this out of proportion? Does anyone recall what it was like when they started out? I mean really started out?

Thanks.

Edit: Thank you for all the comments. You lose sight of the big picture from ground level. Just need to stay the course.

34 comments

[ 5.6 ms ] story [ 74.4 ms ] thread
You'll find it easier to start with web development than C++. Learn Ruby on Rails or the equivalent, churn out a few simple apps to build a portfolio and then hit the pavement as a freelancer (it requires less programming skill than you may think). After a few small contracts (don't over-reach - it requires more skill than that!), think about looking for a real job (if you want one).

Starting from nothing, that process can take a couple years - you'll need some money somehow during the learning period, Make sure that's taken care of because the money won't come quickly as you learn.

I did almost exactly this, and it worked for me.

I agree, if you're looking to work and not just program as a hobby, start with web projects. There's always a friend of a friend (or somebody on Craigslist) with a $1000 and an idea. Your effective hourly rate will be low, but you'll be learning and getting paid at the same time. You'll also find out whether you really want to be a programmer for hire, as it is often the case that the programming is the easy part while the clients are the hard part.
Not everyone will agree with the following, so you'll need to take this, and their comments as well, with a large dollop of critical thinking.

Use Python and write a program that prints the numbers from 1 to 100. Then change it so that when a number is divisible by 3 it prints "Fizz" instead. Then change it again so that when a number is divisible by 5 it prints "Buzz". If the number is divisible by both 3 and 5 have it print "FizzBuzz".

Then write it again in C++.

Now ask, how could your program be made simpler? How could it be made clearer? If someone came to it in 6 months time, what would the y need to know in order to assess whether it's doing the right thing?

If you can do all that effortlessly then you're a long way there and in need of a harder challenge that gives you some satisfaction. If it requires any real thought then you need lots and lots of practice at writing code.

I will look into the Python. The coding in C++ is not a problem. I do the puzzles on ProjectEueler and the exercises in the textbooks but I don't see how they apply to real world development.

I understand the need to practice code and take to it religiously. My wife hated when I was gone all the time. Now I am home and she hates that I am on the computer. You are right about increasing the level of difficulty. Thanks.

Here are some random questions to help you explore what you want to do.

Just to get a feel for the kind of code you write, perhaps you could take this little challenge:

  Write a C routine with the
  following prototype:

  void condense_by_removing(
      char *z_terminated ,
      char char_to_remove
      );

  Your routine should modify
  the given zero-terminated
  string in place, removing
  all instances of the given
  char.
If you're brave you can post your code here ...

Apart from that, the challenge is to decide what kind of job you want, then make sure you develop a resume to get it. If you want a web developer job then you have to write some web apps. If you want a systems programmer job then you need to write some slick algorithmic code.

Do you know what a B-tree is and when you would use it?

Don't know it well enough to code it from scratch at work. Have an idea. Will post something by tonight.

Just finished a Data Structures class and still wrapping my head around Trees and hashing.

Thank you, kindly.

Ok. Had to get this out quick... Back to work. Don't know if it will compile

<code> #include<iostream> using namespace std; int main() { for(int i = 1; i <= 100; ++i) { if(i%3==0 &&i%5==0) cout <<"Fizzbuzz ";

else if(i % 3==0) cout <<"FIzz "; else if(i%5==0) cout<<"buzz "; else cout << i << " "; } return 0; } </code>

  #include<iostream>
  using namespace std;
  int main() {
    for(int i = 1; i <= 100; ++i) {
      if(i%3==0 && i%5==0) cout <<"Fizzbuzz ";
      else
      if(i%3==0) cout <<"FIzz ";
      else
      if(i%5==0) cout<<"buzz ";
      else cout << i << " ";
      }
    return 0;
    }
Cool. Assuming you knocked that out as quickly as you suggest it shows that you've got good basic skills. Design and control of larger tasks/projects is untested, but it looks like you're well ahead of the basics.

Now here's a question: Do you find anything "unsatisfactory" about that code?

Besides not knowing how to post it properly...?

The looping sequence, I imagine, doesn't need the if else queries. Probably simpler way to code it. I am definitely untested with larger projects.

Something like... (Pseudocode)

    for( i= 1,100 )
    {
      if( i%3==0 ) { print( 'Fizz' ) }
      if( i%5==0 ) { print( 'Buzz' ) }
      print( '\n' )
    }
There's no need to treat FizzBuzz as a special case, as if the number is divisible by both it will have already met the conditions of the previous two statements.

I wonder if there's some magic you could sprinkle in to the iterator so it only iterates through numbers which are divisible by 3/5, ignoring the rest?

It probably wouldn't speed the operation up much (if at all) in this case, in a more complex real world scenario though it's best to look at every angle.

You haven't printed any of the other numbers. Read the spec more carefully. You still need to print 1, 2, 4, etc.
Here's what I came up with. It compiles and executes but the result is a random symbol on the console. Definitely missing something.

  #include<iostream>
  #include<string>
  #include<cstring>

  using namespace std;
  void condense_by_removing(char *x, char y);

  int main()
  {
	char *string;
	string = new char[50];
	cout << "ENter your name: ";
	cin >> string;
	cout << endl << "Enter the character to remove: ";
	char ch;
	cin >> ch;
	condense_by_removing(string, ch);
	cout << endl << "new string is: " << *string;

	char dit;
	cin >> dit;

	return 0;
  } 

  void condense_by_removing(char *z_terminated, char  char_to_remove)
  {
	char *chPtr = new char;
	char *trailPtr = new char;

	for(int i = 0; i <= strlen(z_terminated); ++i)
	{
		chPtr = z_terminated;
		if(z_terminated[i] == char_to_remove)
		{
			trailPtr = chPtr;
			delete chPtr;
		}
	}
  }
OK, now's the time to learn about debugging. Writing clean code to solve small problems from scratch is easy. Debugging existing code, especially well-written code, is hard. This is where you need to use your problem solving skills.

Pretend that you're the computer and walk through the code in small steps, tediously detailed. Make sure you really understand what the code is doing.

What exactly happens when you execute "char *chPtr = new char;" ?

What exactly happens when you execute "delete chPtr;" ?

And why do I say that debugging well-written code is especially hard? Because the names, clarity and simplicity in well-written code seduce you into the same mindset as produced the code that has the bug.

I could have used you as my professor in my recent data structures class.

I imagine you have myriad responsibilities in the course of your day and I am grateful for the time you are affording me.

I will work on this tonight.

When I REALLY started out (in 2006) I got an internship with a defense contractor and kind of worked my way up from there. The project I was on had a lot of ex-military people with no programming skills testing our software because that's who our end-user was.

Don't discount a 15 year career as a pilot - you might be able to get a job testing simulators for Lockheed, Boeing, or one of the others, and if you still want to write code you'll have your foot in the door already.

What made you choose programming? The IT industry is in nearly as bad a state as aviation. Neither really recovered from 2001 (dotcom crash + 9/11).

Is there any way you can leverage your domain knowledge? Work in avionics or games/simulation?

Why did I choose programming? Vin: It's like this fellow I knew in El Paso. One day, he just took all his clothes off and jumped in a mess of cactus. I asked him the same question, "Why?" Calver: And? Vin: He said, "It seemed like a good idea at the time." -The Magnificent Seven
Also, programming is likely to be around in a few hundred years. Programming is AI-hard. Few other lines of work are.
After 8 months where were you as a pilot? Were you ready to fly cross country solo?

Programming is hard because you may understand the solution, but you don't know your equipment well enough yet to get you there.

If you know what kind of industry you want to work in (Games, Web, Enterprise) focus on the tools that are used in that industry (C++, Django, .Net). Once you zero in on these specifics it will be much easier to find a mentor/community, because a flight instructor is pretty useless if he doesn't know where the landing gear is.

Along the line of some of the advice below...Programming is hard but you become better with experience. I wont raise your hopes, it really does take years to get to the point where you can get a programming job,it is much more than just learning a programming language (just as learning English wont turn you into JK Rowlings)... unless of course you are much smarter than the average programmer.... I am giving you advice based on experience. I am 30yrs old and have been programming for about a decade. Some of the things you can do after a decade of practice:

http://www.colabopad.com

http://www.meshipu.com

http://www.codeproject.com/KB/cpp/visual_java.aspx

http://www.codeproject.com/KB/miscctrl/ruler_control.aspx

http://www.codeproject.com/KB/IP/videochat.aspx

http://code.google.com/p/rhythmote/

http://pugoob.blogspot.com/2008/01/pugoob-image-search-tool....

Just a sample of my work, doesn't include what I actually do at work. How long do you think it will take you to learn how to build the kind of software above? I would hazard a guess, it will be a looooooong time. I currently work as a System Architect and even so I am not considered a senior person. Programming is like athletics, after a certain age you really shouldn't pursue it as career. You can try to learn it as a hobby, but spend your time and energy on more attainable career goals in the short term. I hate to sound uninspiring but I have seen enough of this type of thing, mid-career people trying to find a lucrative career and thinking programming is the way to go, mostly it is a waste of their time. I am in an MBA class with someone who's about 33yrs old and is taking Oracle classes trying to get into the IT field, he is mostly likely wasting his time.

IF YOU MUST

Start with PHP not C++ (Not likely to get you a job anytime soon)

Learn how to setup an entire LAMP (google it) system first, you could install virtualbox on what I am sure is your windows system

Then try to create some website, maybe a dating site or something your neighbors might find useful.

Be prepared to spend a lot of time on web forums asking questions

Hope this helps clarify some things for.

The advice on PHP might be correct, and it might jive with most of the collective experience of HNers... However, my company is always hiring C and C++ developers... we interview maybe 3 people a weak and hire maybe 1 person every 2 or 3 months.

That said, there is absolutely a shortage of C++ jobs... but this shortage has created an equal shortage of competent C++ programmers. We can't find C/C++ programmers to hire fast enough.

This shit takes years, man. I started 3.5 years ago and couldn't do shit for the first year and a half. Then I got a tutor who got me set up right, and I could sometimes do stuff. Then, three years into this, I started taking off.

I will point out, however, that I decided to go straight into Lisp.

Where did you find a tutor? Any recommendations of where to look?
Ask about grad students at a good local college.
The biggest thing that helped my career and confidence was participating in open source projects. I was a terrible coder at the time, but I learned a great deal and it gave potential employers an additional degree of confidence.

Given your unique experience, you could probably find niche pilot tools that could use help. Check out freshmeat.net and other sites to find projects that are both interesting to you and could benefit from additional input.

Thanks. Will check it out.
Here's my advice: Go build something!

It doesn't particularly matter as long as its appropriate for your skill level (but still challenging)

Example: After taking my second ever programming course I decided I wanted to make an iPhone app. So I picked up two books, made a storyboard, a paper prototype, and then went for it. It was a cookie cutter "inspirational quotes" app but I learned a lot and I was proud of it!

Even better: Go build something you're interested in. It needn't be important, just fun for you.
I have no background in technology or business

Not quite true. I bet avionics companies (and plenty of others) would be very interested to talk to you.

My dad used to be a pilot and now works in technology, though he made the switch a few years ago now.

As for the programming, after learning the very basics you really have to write something and learn as you go. Try writing a little Android app. I bet you could without even knowing Java.

It could be that working as a programmer isn't right for you (maybe a business role related to aerospace), but if you kept it up on the side and used it as your "secret weapon" ^ you could be a real success. Good luck.

^ See Zed Shaw's thoughts on http://sheddingbikes.com/LearnPythonTheHardWay.pdf

Thanks for the link. Python is next on the list. Took one Java class. Maybe Android apps would be good too.

Thanks again.

A fifteen year career as pilot is hardly "square one." At the very least it would make you the best candidate if you ever try to land a job or make a business around this niche.

The great programs are made by the people who used to need them.

I keep neglecting that side of the issue. I am so focused on learning the languages, I lose sight of the experience I have. The noob factor is frustrating.
You have the (rare) experience of a pilot. Therefore I would suggest you think about making iPhone, iPad and Android apps for pilots (i guess most of them use iOS). Start with really small ideas (virtual horizon, display pitch, etc.) and grow to more sophisticated projects (eg. flight planning and so on).

There is a lot of money to be made on those platforms; pilots are willing to pay for tools that help them, and non-pilots don't know what they need and can't easily produce such apps out of the blue. I bet you would also easily find a co-founder once you have concrete ideas / concepts.

mipnix, I noticed a few people suggested looking into work at avionics companies; I think this is a good idea. I work at Rockwell Collins (www.rockwellcollins.com) and I know that we have hired a significant number pilots and ex-pilots as engineers.

Good luck.