Donnerstag, 3. April 2014

Competency

At GameDev.net georger.araujo posted an interesting link:

http://sijinjoseph.com/programmer-competency-matrix/

Btw., can you or can you not do this? (Guess that belongs into the category: what IT feels like ...)
http://www.wimp.com/theexpert/


The matrix is a little biased (scripting ... does not take different situations into account at all) and some skills should go into different categories, but it is a pretty great way to show what IT professionals can get good at.

It is called "Programmer Competency Matrix", but it is more general than that.
It also covers the skills that administrators, consultants and product managers should hone, for example.

In my opinion an interesting addition would be suggested target performance levels (see "The First 20 Hours" by Josh Kaufman) for different IT jobs/roles.
If I get around to it I might start working on something like that.

Sonntag, 12. Januar 2014

The Right Focus

Focus is important but it can also be a dangerous thing.
Being obsessed with something means you do not look into some things that might be important.
Everything is connected, so knowing a little about the context is always important.

But there is also too much to know. If you habitually try to get to the bottom of things there will not be enough time in your lifetime to do (and actually finish) even very simple things.

Thinking about your life as a buffet is probably the best way to go.
Look at TED and TEDx Talks like those:

Logan Laplante
Logan Laplante
Logan Laplante
Logan Laplante
Logan Laplante
Sir Ken Robinson, Logan LaPlante and Jacob Barnett: http://www.collective-evolution.com/2014/01/07/this-is-what-happens-when-a-kid-leaves-traditional-education/

to get an idea of why learning at home is so incredibly helpful these days.

A similar concept applies to the job market:

Jenny Blake: http://tedxtalks.ted.com/video/TEDxCMU-Jenny-Blake-The-Career;search%3Atag%3A%22tedxcmu%22

That is why I would start projects and come up with a game plan.
In case you know this and you worry because there are people who started a lot earlier: don't!
Think about those guys who wrote their first compiler when they were 13 this way:
  • It is unlikely that they are your competition - in many ways
  1. They need to specialize too and probably have a different focus
  2. Know even just a little about a topic they have never worried about: you are better than they are in that area (e.g. they learned C++, you learned Java - they will not catch up any time soon ... they probably do not even want to)
  3. There are, by far, more average programmers out there than very gifted people
  • They might be your colleagues or partners (and you can learn from them)
  • They proof that working on projects and being prepared is probably a good idea
An interesting related topic is how talent, skill, knowledge and genious are connected.
You might think that "Is IT For You?" is the same question as "Do I have what it takes?".
I don't think that is correct, though. As soon as you can provide value and if it is apparent that you are motivated you are interesting as an employee or even employer.

In my opinion talent equals how good you are at learning and gaining new skills by default.
You can get better if you invest time and energy in learning how to
With too little focus you dilute the results / success. Your pace will get faster if you establish and improve your approach to studying.

Freitag, 10. Januar 2014

Find your pace ... and be prepared

Finding the right pace will be a challenge when you work on personal projects and when you actually work as a freelancer or as an employee.
People might tell you that working in an IT environment is stressful and frustrating. Finding the right pace and being prepared helps with that, though.
Frustration is a sign that you are trying to do something in a way that you can not reasonably do it (at the time).

Problem 1 - Moving too fast: This is probably the more common pitfall. You think a task or project should be pretty doable and you realize that it takes a lot more to do the job properly. That is usually when you are tempted to rush (compare: http://blog.activelylazy.co.uk/2011/02/09/if-i-had-more-time-i-would-have-written-less-code/). Know your goals, invest the time to get the desired result and if it takes longer than anticipated try to think about it as a valuable lesson that you just learned.

Problem 2 - Moving too slow: I think sometimes you might end up not moving ahead when you have gotten code to run and fall in love with the result. You start tweaking and rerunning the program when you could move on to the next bigger challenge and save tweaking for later. Don't be too ambitious, though. Enjoying victories is nice from time to time.



When you study at a university the pace is pretty much set in stone. What helps here is being prepared. Try to make sure you have read a little about a topic and maybe gained some hands on experience before things get serious.
If you are still working on a game plan, consider studying out of your league for a while in order to have that advantage when you start studying at your school / academy of (primary) choice. Another benefit: you won't have any "what if I only ..." regrets later or you might even realize that you are not studying out of your league at all.

When you already have a basic understanding of some of the topics, then the new information will stick a lot better. You already have a foundation in place. Your brain just needs to store a diff.
Also read general books that help with being prepared.
The 7 Habits of Highly Effective People helps a lot it you are trying to come up with a game plan.
Then, based on the result, you might want to check out other books (from general books towards specialized books ... usually the general ones provide more value).

Montag, 6. Januar 2014

What IT does feel like

What IT does feel like

This will be a series of blog posts ... this one will not cover a lot of ground. To get an idea of what you would be getting into you should think about what studying, what your private life and what working will eventually feel like.

Studying:
You might want to study at home: reading articles (following RSS feeds), getting an idea of what the big picture looks like, joining courses (e.g. https://www.coursera.org) and communities, looking at other people's code and starting personal projects.

In college or at an academy: This will be a lot like school as you know it. There will be some very abstract and technical material that you have to study. There will probably be some projects that you have to work on. There will be things you need to learn by heart and most of the material is stuff you will never need after you graduate.

Private Life: don't underestimate this part. You commit to a certain degree. You will spend a lot of time in front of the computer. "Just doing it as a job" is not a great idea. If you do not want to bond more with your PC ... you can probably still get a job but your options are a lot more limited, then. Other people will know you as an IT guy. That is a label worth thinking about because there are a lot of assumptions that might be annoying at some point (every IT guy can help with that virus ... or set up a local network in a few minutes. Right?).

Working: A big mistake to make is thinking that once you know how to program you will primarily apply that knowledge and write code most of the time. The truth is that the biggest part will still be research (reading API documentation, reading the existing code that you are working on or reading material that describes the problem domain*). Another big part will be trial and error to see if your approach works. In many cases you will also have to come up with a software design before you start coding and you will do testing as soon as you are done.

A good programmer will write as little code as possible. If people tell you they write a lot of code all the time, then chances are they (or their company) have not found the most efficient way to solve the problems at hand or that they work in a huge company where all the tasks mentioned above are given to highly specialized people.



* When you write software that creates value there are always two domains: the problem domain (in what concepts do your clients think, what terminology do they use) and the solution domain (what tools and methods do you use to write software and solve the problem).
A good programmer should be able to communicate using the vocabulary of both domains. A good project manager should mostly know the problem domain and have a rough idea of what the most important solution domain concepts are.
A pure tester should not have to worry about the solution domain because that creates a bias or confusion.

What Is Your Angle?

What Is Your Angle?

Your idea of what getting into the IT world looks like depends on your angle. Probably you grew up with a computer or have been using one for a while now.
Do you avoid the overly technical stuff? Do you want to be able to manage a local network at home? Are you the competitive type and want to see how far you can go ... how good a programmer you are or can be? Maybe you had a taste of programming at school and you liked it well enough. Maybe you have a feeling that being able to create software (apps or a web application) might make you rich some day.

You should play the thought that you have finished learning and are looking for a job now. What vision gets you exited emotionally? Is the money you earn the most important thing? Do you want the challenges / your work to be interesting? Do you want to be proud of the product or services you provide? What is important to you? What would be a deal breaker?
  • Do you want to be a decent generalist or do you want to specialize fast?
  • Do you want to work as an employee? If yes: for a large or a small company?
  • Is there an industry you prefer (Automotive, Education, Marketing, CRM / Business Intelligence, Games etc.)?
  • Are you primarily interested in web design?
  • Are you interested in mobile / apps?
  • Are you interested in Big Data and similar new developments?
  • Are you still trying to find out what "your thing" is?
  • What area areas might be right for you?
  1. Operation / Support
  2. Administration
  3. Development (Apps, Web Backend/Frontend, Software Architect, Embedded Software...)
  4. Testing
  5. Project / Product Management
  6. Freelance work
  7. Consulting
Don't worry about if you are good enough at Math yet. The IT world differs a lot depending on where you enter it so I will not scare you with generalisations any time soon. It is just important that you set the course correctly ... and that you can accurately compare the option to alternative career paths.
You might have a skewed idea of what working in the IT environment feels and looks like if you judge based on the little experience you have.

Before you look for the best programming language to learn and what books you should read you should do a little research and come up with a vision of what you want to be able to do in the future.
Communities and sites that tell you first steps without asking for your goals are hardly helpful in my opinion.

Hello World!

Hello World!

I am starting this Blog for my cousin who will finish school soon and considers studying at an IT centered academy (the one that her mother and me went to). When I realized that there is a lot to say I thought that I could keep it general enough that other people might get something out of it as well. It does seem like a pretty common situation that people might be in.

Not sure what direction I'll take exactly. Feel free to ask questions and state your opinion on what I wrote.