
Jack Of No Trade - bluepanda_
http://hery.ratsimihah.com/2013/04/11/13-jackofnotrade.html
======
noonespecial
I've noticed that there are two kinds of "makers" who get stuff done.

The first kind learns and learns deep. They are spooky good at it. They'll
latch on to something and then follow it all the way down to its roots,
learning it in tremendous depth to the point that their skill in it seems
almost supernatural. After all of this, they say to themselves "now what can I
build with this?" (Or find a place where an employer tells them this).

The second kind decides what they want to build _up front_ and then pursues
wide and varied avenues of technology on the path to this destination. They
often have fascinating slivers of depth in certain areas but lack that magical
seeming deep domain knowledge. These are the people more likely to identify as
"self taught" with all of the downsides that come with that. They make up for
this with ridiculous determination and a kind of sixth sense for what is
possible if you try hard enough. Everything they know, they learn on the path
to the destination.

Both can accomplish amazing things. You'll never hire one of the second kind.
The second just isn't going to be able to show you pointer arithmetic on your
whiteboard in your pet language.

~~~
pedalpete
I completely agree with you, and I find myself in the 2nd camp.

I'm curious about why you say "You'll never hire one of the second kind"?

How does one of the second kind fit into the world as an employed developer?
This is something I'm struggling with currently.

~~~
noonespecial
The point was that current interview processes have no mechanism for measuring
the second sort of individual. They don't have a way to measure tenacity and
the uncanny knack of discovering the best way to do something when starting
from ignorance(1).

tl;dr: A Google-like company would not have hired (someone like) Woz.

 _(1) Its double-hard because there are no shortage of people with tenacity
who have the knack for doing things in a terrible way over and over. They all
think they're in the former category._

~~~
adambard
I find Github has helped with this problem a lot.

~~~
noonespecial
I actually think this is the solution. Nothing would be more impressive than a
python project that started out as a "c++ witten in python" project that
barely worked but then evolved into a well managed project full of best
practices in a matter of weeks.

I'd hire that person to do nearly anything. Sadly, not many interview
processes are hip to github yet.

------
incision
I can't speak about programming specifically, but for more general system
engineering/administration I think I fall in this category and it has yet to
hurt me.

I've had an interview or two over the years in which I surely lost out due to
my inability to rattle off some bit of trivia about one thing or another, but
it's probably for the best.

1) If the job was really so narrow that such a specific, rote depth of
knowledge mattered I'd probably find it terribly boring.

2) If the interviewer is willing to write me off based on canned questions
without actually conversing with me - the place where I feel I shine. I
probably don't want to work for/with him/her.

Yes, there are surely exceptions to this, it's not a hard and fast rule, but
as I said above it has worked out fine for well over a decade now.

------
Daishiman
It depends on the nature of the problem, but you are actually very solid with
language skills (you know at least 4 or 5 different languages with sufficient
skill that you can develop subtantial apps with them and not trip over
yourself in language minutiae) it might not be a bad idea to gently twist the
truth, assuming you can pass the technical tests.

Lest anyone think this is unethical, do remember that the large majority of
job postings are made by people who ask the impossible (a level of experience
in new languages that basically make it accesible only the language
developers) or the irrelevant. Use your own criteria to determine when this
makes sense.

------
404error
I am facing a similar problem as the author.

I work at a newspaper and since I've been here (8 years now, I'm 28) I have
learned some skills:

* Advertising Design(Print and Online Ads) * Layout Design * HTML * CSS * Some JS * PHP * mysql * Currently teaching myself Python * Online Advertising (Booking Campaigns)

I know how to do a lot, I just don't feel like I'm good at any of it. This is
where I feel Jack of all trades (master of none) is an insult rather than a
compliment.

Like the author I feel that if I apply somewhere else my skill level might not
be up to par. It really is frustrating.

~~~
kawera
Been there. Maybe this: <http://en.wikipedia.org/wiki/Impostor_syndrome>

~~~
joshguthrie
I second that emotion. It can happen very easily (well, it did to me) if
you're feeling "down" or particularly unsure about the future.

And yet, why would we need to be "Master" of anything?

One thing struck me in Hery's post: He did things. He accomplished. And many
of these things he seemed to enjoy doing. How many of us here, with our fancy
degrees and self-taught knowledge have lots of projects "on the side", always
thinking "I'll do it when I got time" but never actually DOING anything? Like
kids in front of a box full of LEGO, rummaging through the pieces, putting two
of them together then going through it again,... In this age full of
distractions (let's look at your reddit karma again, and are you sure your
inbox is empty? maybe someone tweeted something interesting in the last five
minutes), the value of your knowledge ain't "jack", your value as a developer
lies in what you can accomplish.

Don't mind the bullshit job offers asking your for "ten years in java, 20
years in ruby and 50 years in BASIC (knowledge of COBOL a plus)", most
companies would KILL to have someone as devoted (and versatile) as you.

Keep on!

------
loser777
2nd year college student here--it feels that the structure and organization of
coursework at many schools (including mine) seem to encourage this kind of
learning. Projects that may seem technically involved but end up being a race
to Google are common. Our school year, like those of many other schools is
built around the quarter system. Quarters are ten weeks. It's not uncommon to
be doing completely different and unrelated from week-to-week, and my first CS
undergrad lab course was a good example of this kind of structure. One week
you're doing bash scripting, the next week python, then you learn some basic
git, rudimentary multithreading in C, and so on for 10 weeks. You'd hammer out
an assignment only to forget the details of what happened days, maybe hours
later. By the time the final rolls around you wonder how anyone would survive
this course without the Internet or if we weren't allowed to bring copies of
our notes and past code for the exam. Each assignment is a mad dash to learn
just what you need to finish.

Of course, even with such brief bursts of effort, you can "relearn" quickly by
consulting various references and refreshing your memory, but it becomes
difficult and scary to imagine what life would be like if we couldn't look up
whatever we needed.

~~~
suhastech
"scary to imagine what life would be like if we couldn't look up whatever we
needed"

It'd be scary to work out math problems without pen and paper. It'd be scary
to cross over the amazon without an airplane. Applies to every tool you use.

I'd like to think of Google as my secondary memory (HDD?). All I seem to have
is RAM.

------
mindcrime
The choice isn't necessarily between:

1\. dabble in everything and master nothing

OR

2\. Specialize in one thing and never touch anything else again.

There's a bit of a middle ground. Have one (or two, or three) things you
specialize in and develop great depth, coupled with a tremendous breadth of
general knowledge of related things.

You could strive to be a "generalizing specialist" as they say[1] or a person
with "t-shaped skills"[2].

"T people" are very highly valued, in at least some contexts[3].

[1]:
[http://www.agilemodeling.com/essays/generalizingSpecialists....](http://www.agilemodeling.com/essays/generalizingSpecialists.htm)

[2]: <http://en.wikipedia.org/wiki/T-shaped_skills>

[3]: [http://chiefexecutive.net/ideo-ceo-tim-brown-t-shaped-
stars-...](http://chiefexecutive.net/ideo-ceo-tim-brown-t-shaped-stars-the-
backbone-of-ideoae%E2%84%A2s-collaborative-culture)

~~~
Ologn
I agree. I heard Donald Knuth endorse in an interview the notion of Thomas
Huxley that one should "try to learn something about everything and everything
about something".

------
arbuge
This is a failing in job interviews in my view - selecting for skills that
might not matter in practice. If you can build decent working code by Googling
stuff as you go along (I know that approach works for me at least, besides the
poster), there must be some real value to that which interviewers are missing.

~~~
georgemcbay
It (usually) isn't a binary decision as to whether or not a candidate adds
value to the company, but rather a decision on whether or not the candidate
adds more value than the other candidates interviewed for the job. Given the
choice between someone who can code sans-Google and someone who needs to
constantly copy-paste from Stack Overflow, I'll take the guy or girl who can
code on their own.

Of course, this doesn't mean I think programmers shouldn't use Google or Stack
Overflow, I use them all the time. However, the specifics of what you're
Googling matter a lot. If asked to implement a Red-Black Tree and you have to
Google that to get an idea of what it is (or to refresh your memory) that's
one thing, but if you have to Google basic loops or "FizzBuzz level" basic
discreet logic constructs to implement simple code, then that's a huge
problem.

------
delluminatus
In my experience, technical questions aren't usually language-specific per se.
Instead, they focus on algorithms & data structures. Are you getting a degree
in Computer Science? If so, you should be pretty well-prepared for technical
interview questions already.

AI and Machine Learning are very interesting fields, but you need a deeper
understanding of CS than you do for mobile/web development. Just out of
curiosity, are you familiar with what a state-space search is, and the
difference between breadth-first and depth-first?

edit: FYI, I'm also C.S. major graduating this semester. I consider my
interests to lie in AI and ML as well. I've not had any trouble with technical
interview questions.

~~~
bearmf
Author is applying to wrong companies if he is getting lots of language-
specific questions. The right kind of company for him is probably one that is
looking for smart people who can program and not for Java jockeys.

------
bridgeyman
My experience with technical questions during interviews is that they did not
need a deep understanding of any particular technology. Instead, they mostly
rely on some knowledge of algorithms and data structures. Almost all of my
coding questions came from the following classes I took at MIT: Intro to
Algorithms (6.006) Design and Analysis of Algorithms (6.046) Mathematics for
Computer Science (6.042)

Take some version of those classes (maybe OCW, edX, or Coursera) and you will
be good to go — at least for technical interviews. If you like reading then
Introduction to Algorithms by Cormen, Leiserson, Rivest, and Stein is the book
that these courses cover.

~~~
thetrumanshow
Listen to this guy. Most interviews (even technical ones) don't dive that deep
at all. Lets be honest, its just like your college courses. They just touch
the high-points on the surface of the subject.

Try this experiment: ask someone in school who just finished a hard-sounding
class (that you haven't taken yet) to interview you based on knowing answers
to things they learned in class. It should sound mostly greek to you. From
your perspective, you don't stand a chance of knowing the answers. But, now
you know that the delta between not knowing and knowing is one semester, or if
you're brilliant, two nights of cramming.

My point is, there is very little delta in what is required to prepare for an
interview and what is required to prepare for year-end exams in any given
subject. You don't need a lifelong working knowledge of theory. You need
enough immediate knowledge of algorithms to get you past the meat-grinder.
Remember how you crammed in college? You can get by most of the time by
cramming hard for the interview. Also, you get partial credit for thinking out
loud about the answers you're considering giving, if you're anywhere within a
mile of the correct answer, the interviewers will likely give you a passing
grade on the question.

Once you're inside, most of those challenging questions, well, they'll likely
never come up again. Just like the stuff you "learn" in college.

Source: In my previous life, I was part of a team of developers who
interviewed people for technical positions. We were mean, ruthless
interviewers. I've also been through the meat-grinder myself a few times.

------
jerf
The good news, and perhaps also the bad news, but in your chosen context the
good news, is that Javascript, Python, Ruby, and to a lesser extent,
Objective-C, are all essentially the same language. You're probably not as
split as you think, and if you are going to stick within that paradigm you at
least have perspective relative to someone who only knows one of them. You are
right that you should really learn one of them deeply, but it hardly matters
which, and a great deal of the deep knowledge will transfer fairly well.
(Again, Objective-C being the odd man out a bit, but still in the same broad
family.)

~~~
tkahn6
It's more the ecosystems than the syntax and semantics.

Bundler, gem, pip, npm, blah blah blah. It's a lot of stuff to grok if you
want to get anything done in the 'right' way.

~~~
jerf
It seems to me that there's a developing consensus even in the deployment
ecosystems. Everybody's growing towards what I might call a file-system-
virtual environment per application, so you don't get conflicts in the "core"
OS, automatic dependency management, etc etc, and it seems like the libraries
grow ever closer to each other. What is one year some bizarrely-awesome
library in one particular language is two years later copied in all the
others. (Which is a good thing.) That whole family of languages is all headed
for the same basic local optima, which is the bulk of why I would claim
they're all essentially the same language.

------
nilkn
To the contrary, I think this sort of broad experience is excellent to have at
the beginning of your career.

I'll admit I'm a little confused, as my entry-level interviews never involved
any questions about language or API trivia. If I had to write code, I could do
it in any language I wanted and was comfortable with. And sometimes I wouldn't
even have to write code, just discuss a problem and potential approaches. The
solutions would never depend on library-specific knowledge.

~~~
BenjaminRH
> I'll admit I'm a little confused, as my entry-level interviews never
> involved any questions about language or API trivia. If I had to write code,
> I could do it in any language I wanted and was comfortable with. And
> sometimes I wouldn't even have to write code, just discuss a problem and
> potential approaches. The solutions would never depend on library-specific
> knowledge.

Then you were lucky. A lot of interviewers can't get that far.

------
realrocker
I started with Assembly Language moving on to C/C++ for hardware programming.
Then came Actionscript and PHP followed by Java. Got a job, they told me to be
a Javascript, HTML/CSS guy. The next one asked me to do Python, C/C++, Java
all at once. Left job, released a game written in Lua. Went back to work for a
startup in Java(Android) and Python. I did that for 6 years(college included).
When I started working on my own startup(bootstrapping alone), and was in the
exact state of mind as the author. "Well, fuck. I am average at almost
everything I know." 8 months later my language skills have still not changed
much, but I have found out that I can architecture projects better than my
peers. Almost magically I somehow pick the perfect module for my project. I
suspect that ability has developed by tinkering with different frameworks and
languages over time. I still wish I had the freedom to be an expert at one.
But in life you don't always get what you want. At-least now I have the
ability to handle the technology stack of my startup alone i.e Golang,
AngularJS, Android and iOS. It's not ideal but works out.

------
rdouble
Work through the latest edition (4) of Sedgewick's Algorithms book and do the
algorithmic challenges on Interview Street.

This will fix the problem of having a wide range of hacker skills and a
portfolio of projects but not being able to make it through a Google inspired
interview.

There's probably a Coursera or OCW course that might help but the key is you
have to actually do the exercises.

~~~
bluepanda_
This sounds good, thank you!

------
dasil003
College is not the time to worry about spreading yourself too thin. It may
seem like you're all over the place, but this is all just a drop in the bucket
compared to the professional work you will do in the future. Most jobs will
give you an opportunity to hammer away at the same code base for an extended
period of time, and this experience will be far more valuable than doing a
bunch of one-off projects in the same language simply for the sake of
mastering said language.

In short, I think you're doing it right and will end up better off than
someone who focused on one language because that's what companies appeared to
want.

------
columbo
Great work!

I have two suggestions:

Build an application in Clojure and in C/C++. IMO you should try a functional
language (doesn't have to be clojure) and a lower level language. It could be
a clojure webapp and a C++ opengl game... doesn't matter.

Here's something to get you started:
<http://nehe.gamedev.net/tutorial/lessons_01__05/22004/>

I wouldn't worry about specializing just yet, just keep doing what you're
doing, just up your difficulty level. Already you've done more than 50% of the
programmers in the market (most know one language, like Java or C#).

------
aglosson
In my experience, I have found that I needed to take a step back and focus on
a solid foundation of technical knowledge that is totally language
independent. After that, you can go back in and layer in how different
languages might help/hinder you in particular situations.

Much of my education was from a "get cool shit done" perspective, and I did. I
had solid projects in an array (no pun intended) of languages but lacked some
of the true, lower-level knowledge as a foundation.

Your mileage may vary, of course, but if I could start my CS education over
again, that would be my advice to... myself..

------
wes-k
Using the analogy of spoken languages ( a stretch I know ), I'd say there is a
big difference in knowing enough to get by when traveling vs being fluent.

When a company is hiring, would they rather hire someone who can get by or a
fluent speaker?

I think there is certainly a breath and depth balance to be had and I think
you are correct in seeking more depth. A deep understanding of one language
will allow you to more quickly gain depth in other languages.

And have fun!

------
zoba
I have been thinking this myself recently, and contrasting how difficult it is
being a founder (which pretty much requires a jack of all trades skillset),
versus being employable until you can support yourself long enough to risk not
having a job for a while (god damn student loans).

It is really tough to strike a balance.

------
alecdibble
Alex Krupp has laid out an elegant solution to this problem:

[http://alexkrupp.typepad.com/sensemaking/2012/09/program-
abo...](http://alexkrupp.typepad.com/sensemaking/2012/09/program-above-and-
beyond-your-actual-ability-by-using-freemind.html)

------
paulocal
You are a perfect fit for advertising agencies with digital departments. They
usually need a jack of all trades. One who can build simple html/css sites,
write Javascript, iOS app development and even backend development for larger
campaigns.

------
onan_barbarian
Given that the poster says "my ultimate goal is to build a general artificial
intelligence" I'm not sure that facility in any given programming language (or
the lack thereof) is the poster's biggest problem.

------
lucidrains
You are on the right track, keep going!

------
waxzce
next you will use Scala and PlayFramework2 and host it on Clever Cloud :-)

------
shadowrunner
Here's the answer to all your worries: The Sex Pistols.

Yes, the punk band. Those misbehaving misfits that couldn't play their musical
instruments and yet went on to change music forever.

The Sex Pistols succeeded with barely a shred of skill or talent because they
were on a mission and executed it with ferocity.

No talent is required to make a difference. Just piss and vinegar and a grand
vision. The Sex Pistols prove it.

~~~
wonderzombie
It's a nice story, but for every Sex Pistols there are a bajillion other
talentless bands who executed their vision with ferocity and never went
anywhere.

This is assuming one accepts your definition of talent. Is it true that they
had no talent? If they couldn't play their instruments, sing, or write lyrics,
why did anyone listen to them? There had to be something there. If anything I
might say it requires substantially more talent to overcome an utter lack of
skill in order to excel.

Also, all else being equal, additional skill or talent won't hurt.

Bottom line: the stories you hear about people who go from nothing to
incredible success are outliers. I think determination is absolutely
underestimated relative to raw talent, but that determination should be
leveraged in service of developing skill and/or harnessing talent, not in lieu
of skill or talent.

~~~
shadowrunner
Frontman Johnny Rotten did eventually get good at singing, but he made history
and a million bucks along the way.

