
Ask HN: Most valuable skills you have? - bavidar
A freshman in college asked me what are the most useful and valuable classes that he can take that he will actually use. I told him its more about building a useful skill set. What skills have you acquired over the years that you deem most useful?
======
edw519
The single most important skill I have ever learned is how to take care of
myself.

When you feel like shit, you won't want to do anything.

When you lose your health, you won't be able to do anything.

(I've been a professional programmer out of college for over 30 years and I
feel like I'm still 25, doing my best work ever.)

I remember the exact moment in college I was made aware of the critical need
to do this. I was eating a PB&J on white bread in our kitchen when one of my
fraternity brothers (a jock and a health nut) saw me and yelled, "Save your
life! Save your life!"

"What the hell are you talking about?" I asked him.

"Don't eat white bread. Read 'The Save Your Life Diet'"

So I read the book and have never looked back. I have read many other health
related books since then, but it's not their contents that made the
difference, it's the mindset I developed that has.

College is the time when this appears to make _the least sense_. You can eat
or drink almost anything, go without exercise, and develop bad habits and
still feel fine. But it really is the best time to lay the framework for a
lifetime of good health. It's the time when you'll be able to experiment and
learn the most about yourself and what works and what doesn't. And make no
mistake about it: this is stuff you must learn and practice; it _does not_
come naturally.

I have and I'm so glad that I did. I have watched so many of my contemporaries
gain hundreds of pounds and accept a lifetime of ailments as inevitable, while
gradually retiring to the sofa. It doesn't have to be this way! Learn how to
take care of yourself now or all the "skills" in the world won't matter when
you most need them in the future.

Specifically:

    
    
      - Learn how to eat.
      - Establish your best lifetime exercise habits.
      - Learn what to avoid (or accept in small doses).
      - Adopt a healthy mindset.
      - Learn to embrace fresh air & water & good sleep
      - Most of all, do all of the above no matter what anyone else says or does.
    

I'm so glad I ate that PB&J on white bread at that moment in that place. Who
knows what sofa I'd be sitting on with my TV & junk food & prescription meds
instead of doing great work and hanging out with you guys here.

~~~
hnriot
While it's pretty obvious you should live a healthy life, sadly, life will
also throw things your way that no amount of lifestyle can protect you from.

Taking care of yourself is 50% lifestyle and 50% luck, and unfortunately that
split shifts unfavorably with every passing year. Ailments are inevitable, no
matter what you eat, or how much exercise you do.

~~~
enraged_camel
>>Taking care of yourself is 50% lifestyle and 50% luck, and unfortunately
that split shifts unfavorably with every passing year. Ailments are
inevitable, no matter what you eat, or how much exercise you do.

While some things are definitely out of your control - you may get hit by a
drunk driver tomorrow and be incapacitated, for example - your lifestyle _can_
protect you from a lot of the randomness out there. I would say the percentage
in the Western world is more like 95% to 5% [1]. You mention ailments, but
ever since I started exercising and eating right several years ago, I haven't
gotten sick at all beyond some headaches here and there, and one instance of
food poisoning. Before that happened, I would catch cold on a regular basis
because my immune system was weak.

[1]Now, this would probably be different if we were living in, say, Congo,
where the environment is a lot more chaotic and individuals have a lot less
control over their own well-being.

------
rayiner
I have found over the years that one of the most valuable skills you can
cultivate is being able to read people to figure out what they really want.
Through your whole career, and especially earlier in your career, people are
going to ask things of you. Senior people are going to give you tasks and
assignments, clients and customers are going to give you problems to solve,
etc. It is a tremendously valuable skill to be able to talk to people and
figure out what is really being asked of you and what the other person really
wants and needs. When you can get in the other person's head and figure out
what they need, you will: 1) make fewer mistakes; 2) waste less time on
tangets; 3) be able to anticipate problems; 4) inspire confidence by asking
the right questions; and 5) deliver exactly what is needed, no more and no
less.

I'm not really sure if you can take a class that will teach you this skill.
Socializing at parties is actually a great way to work on this skill--try to
meet new people and see how quickly you can figure out where they're coming
from. Working on group projects is also a great way to build this skill. As a
freshman or sophomore you'll usually be the one getting assignments and as a
junior or senior you'll be handing them out, and when you see both sides of
the coin in a similar setting you can really develop an appreciation for what
good communication looks like.

~~~
bavidar
On the same note of reading people is being able to talk to different people
and adjusting how you talk to them. Its a matter of adjusting yourself to your
audience.

------
SatvikBeri
There are two major types of career skills:

1\. The ability to spot trends ahead of time, understand people's problems,
and come up with solutions. In other words, the ability to figure out which
types of skills will be valuable.

2\. Deep knowledge in one or more areas, such as programming, Math, etc.

For example, due to (1) I was able to figure out that Machine Learning was a
valuable and growing area, pick up a book, and get into the field. Today Data
Science is still a great field, but the bar to break in is higher than it was
3 years ago.

My areas of deep knowledge are Math and Psychology. My deep knowledge in Math
made it very easy to pick up Machine Learning/Statistics when the time was
right. There were other related trends I could have followed (e.g. learning
Hadoop, learning NLP) but those would have been harder since I didn't have the
right background.

In college, your friend should focus on building up the type of deep knowledge
that will help him easily acquire related skills later on. Generally speaking,
it's helpful to take high-level, general courses as opposed to courses that
focus on the tool of the day. For example, a course on Algorithms is more
useful than a course on Python.

As he advances, he should start paying more attention to industry trends.
Eventually he'll get to the point where he can realistically understand the
major problems in the industry, and quickly pick up the skills that let him
solve those problems.

------
dsr_
Estimation. If you get into the habit of doing a back-of-the-envelope
approximation any time someone mentions a figure, you can develop the fine
ability to tell whether they have any idea of what they are talking about.
Alternatively, you can get a clue about just how big/expensive/difficult a
project is.

Basic statistics and probability. You hardly ever need to pull out a T-test or
calculate the standard deviation, but knowing what they are and why you should
expect runs of good luck and bad can help smooth out your life.

Sitting down and concentrating on a subject may not be a teachable skill, but
it can be learned and practiced. Highly recommended. Similarly, general
research skills are lifesavers. Most people think they have them. Most of
those people are wrong. Again, there might not be formal classes (or there
might be, if you have a Library Sciences department) but they can be learned.

~~~
sigkill
>general research skills are lifesavers

I'd like to add one point here. Researching for a new tv model is a totally
different beast as compared to researching something very technical in a
field, (e.g.) the right mixture\\* to optimize burn time vs thrust in a solid
rocket motor in prograde to Venus.

It's fairly easy to find info about common and popular things because the
target audience is the general public and they write in a very informal tone.
And because of penetration, you'll find quite a lot of information and you
just have to apply statistics/probabilities to what you read online to factor
if you're going to buy that TV set or not.

On the other hand, specific data will be very hard to find. You may have to
start searching for related topics like rockets and fuels before you try to
find ratios. Even so, you may end up having to contact a professor or someone
whose name you found on a related page. They may not know the answer, but they
in turn will/may try to hook you up with the person who _probably_ knows and
this repeats. This takes time (atleast a few days if not weeks).

* You may need info for the fuel ratios for hobby, work, or academia.

------
enduser
Learning and practicing the full Common Lisp language. It's a big language for
a reason: Greenspun's Tenth Rule is true. If you work on sufficiently large
programs in other languages, you will reimplement features already present in
Common Lisp. Common Lisp is the careful amalgamation of years of
extrordinarily expensive research and learning by some of the brightest minds
on how to solve some of the hardest problems in computing. Drink from their
distilled wisdom.

~~~
Locke1689
If you want a more theoretically pure variation you should look at the Racket
language group.

My variation of Greenspun's Tenth Rule is that Common Lisp contains a
reimplementation of Scheme, with some added "features."

~~~
enduser
Everything in Scheme is there for a theory. Everything in Common Lisp is there
for a practical reason. Common Lisp is the result of many smart people--who
understood the theory--delivering big software systems and refining the
necessary tools into an eminently practical language.

~~~
Locke1689
OK, what is the practical reason for abandoning constant space tail-call
evaluation?

~~~
enduser
All major Common Lisp implementations do have constant-space tail-call
optimization: <http://0branch.com/notes/tco-cl.html>

It is not required by the spec, presumably to ease compliance in simpler
implementations, because Common Lisp provides other iteration constructs
missing in Scheme (DO and LOOP) which were preferred over recursion in
practice.

Edit: It appears that in some exotic cases CMUCL (and maybe SBCL) does not use
constant space for tail-calls when it would interfere with the proper
relationship with dynamic bindings.

~~~
Locke1689
It is not an optimization, it is a different evaluation semantic. If a
_semantic_ property of the language is not guaranteed then it should not be
relied upon. Thus, it forces you to alter your code to fit the broken
semantics.

~~~
enduser
How it is not an optimization to implement the evaluation of a given segment
of code in a way that uses less memory?

My understanding of the historical reasoning is that DO and LOOP are preferred
in practice because the conditions of iteration are specified in a more
predictable location.

By your line of reasoning, one should not rely upon Typed Racket because the
functionality is not guaranteed by Scheme or RxRS. Neither should one rely
upon SBCL's ability to run circles around Racket; performance is not
guaranteed by the Common Lisp standard.

~~~
Locke1689
From the Racket docs:

 _This evaluation behavior is sometimes called tail-call optimization, but
it’s not merely an “optimization” in Racket; it’s a guarantee about the way
the code will run. More precisely, an expression in tail position with respect
to another expression does not take extra computation space over the other
expression._

And you're right -- typed racket is still in its growing stages. There are a
lot of guarantees you don't have.

------
byoung2
_What skills have you acquired over the years that you deem most useful?_

The ability to learn new skills quickly

~~~
lotharbot
Related: the ability to do research.

In my previous life doing IT, I was the "go-to guy" almost entirely because I
knew how to efficiently and effectively read man pages and use Google.
Nowadays that may take the form of reading API specs or language docs.

The way to acquire that skill is simply to do it over and over again.

~~~
sigkill
>The way to acquire that skill is simply to do it over and over again

I would totally agree with you on this one because of my personal experience.
I'm no CS guy, and nuking a VPS repeatedly (screwing up because typing a /
instead of a ./ kind of errors) and installing a LAMP stack and CMS software
has made me proficient even in the finer points of LAMP (like memory
utilization of mysqld, or number of processes in PHP). Because of this, I am
way more comfortable with linux as well.

You wouldn't believe, I've destroyed installations like no tomorrow. And even
on the personal front, more often than not, I tend to screw up my hardware and
then with a great incentive to try and make it work again I read man pages,
google every possible stuff to get it fixed. This automatically results in me
knowing EXACTLY what to do when someone's screwed their hardware and are
terrified.

So, actually I think I should say, "Not afraid of breaking things, AND (most
importantly) have determination to fix them up again."

------
codegeek
Ther are different categories of skillsets that one aquires over the years and
are important. For me, the most important one has been People's skills which
include communication, negotiations and ability to influence. These might
sound cliched but in my experience of almost a decade of professional work,
these values are very imporatnt. Technical skills etc. are of course important
but you _will_ pick those up over the years once you have a few years of real
world experience.

~~~
freework
I worked with many people who have terrible technical skills, but impeccable
people skills. Those people are the ones who are by and large most successful.

If I could trade in all of my technical know-how for the same amount of people
skills, I would in a heartbeat.

------
mattvanhorn
My most valuable classes were my electives. Philosophy, Anthropology, &
English Lit. especially.

My major was architecture, and the design classes gave me a sense of
organization and elegant problem solving that are useful even as I build web
apps for a living.

My drafting classes were useless - thank god I taught my self to use a pirated
copy of AutoCAD at the time.

My classes in concrete and steel used large books of tables to look things up,
which I am pretty sure can be easily handled by computers nowadays.

Data Structures and Algorithms would be the only thing from a traditional comp
sci program I would have benefited from, I think, but I've done quite a bit of
self directed learning in those areas, and am not worse off for it.

If I had it to do over again, I would've skipped school and tried to
apprentice myself to people working on cool things instead. But I love to
educate myself, and learn wherever I am. Some people are better off being
guided, and those at upper-tier schools will benefit 90% from the connection
they make, and 10% from the classes.

------
vsbuffalo
Simple answer? Programming and statistics. These are desperately needed in the
sciences, and having them makes me very valuable.

I work as a bioinformatician in plant genomics. My background is in economics
and political science, with a minor in statistics. Jumping into genomics
without a background in biology seems impossible, but I learn fast, and
programming and statistics are desperately needed. Biologists are typically
terrible at statistics, and even worse at programming, so people with skills
in these ares are desperately needed.

Approaching problems with a social science background is also useful. I was
interested in quantitative comparative politics, where observational data is
the only data, and one tackles it with advanced models that try to control for
confounding variables. Modern-day biology is similar: there may be some
randomized experimental design, but confounding is still everywhere.
Surprisingly biologists, trained only in randomized designs, don't see it this
way.

------
bstpierre
I dual-majored in CS and Business. I don't think any single class really
stands out, but the combination of a broad sampling of classes lets you make
connections between various topics. A few classes that have had a lasting
impact:

    
    
      * computer architecture -- for understanding what's going on at a low level
      * digital circuits -- for understanding the next level down
      * physics -- yet another level down...
      * all the various math -- shouldn't this be obvious?
      * statistics -- take the course from the Math Department if possible; the courses offered to Liberal Arts & Business majors were watered down
      * organizational behavior -- for understanding how humans interact in groups
      * a foreign language or two (and don't just learn the language, learn about the culture) -- for an appreciation of how things work elsewhere
      * a course in something you know nothing about that requires a lot of writing (I found this to be better than the actual "writing course") -- to learn how to research, organize your thoughts, and present information
    

Also, learn how to get along with people, and keep in touch with the people
you meet along the way.

Looking back nearly 15 years later, the courses I wish I had taken:

    
    
      * more EE
      * forestry & ecology (I own some land with a woodlot now...)
      * compilers (it wasn't offered every year, and I had a scheduling conflict the last time it was available) -- though this isn't that hard to self-instruct as long as you have a solid footing in the basics

------
jwb119
I would tell him he is asking the wrong question. In my experience the vast
majority of college classes will never have any significant value in the
workplace. Instead, I would tell him to branch out, take courses he might
never think of trying, and follow a line of courses that he finds most
intellectually interesting. People that are passionate and engaged tend to
excel at whatever they are doing. There is plenty of free time to learn
practical skills.

~~~
catch23
some fundamentals don't change though... the college classes that will still
remain useful would probably be either compilers or data structures. even some
of the basic operating system stuff (filesystems/scheduling) would still be
useful today.

compilers are still extremely practical. I'm sure everyone has had a scenario
where they had to tokenize lots of strings and turn it into something
meaningful.

------
Dirlewanger
In any group project setting in college, take the lead because more often than
not, no one else will due to apathy. Learn what it takes to get shit done for
scenarios on the crap end of the spectrum. Break up the work for everyone and
dictate precisely what you need and what you expect of them. Give no leniency.
_Hopefully_ with time, kids will begin to respond to demands and begin to
participate more in the group if they haven't already. Discussions won't be so
one-sided. The more people talk, the more you should (as the team leader) make
yourself transparent and open to feedback/changes in direction. Yeah, it will
suck, your whole professional career will be working with difficult people.
Get the skills you need now in an environment that's not going to tarnish your
professional reputation.

Also, if all goes well, it gives you good ammo to tell in job interviews.

------
NemesisVex
I'd rather answer the freshman's original question: accounting.

I took an accounting class as an adult, and I wish I had taken it when I was
younger. I don't look at my checkbook the same way, and while I haven't really
done much with my businesses (record label, music publishing), I know how to
keep my books.

I worked at a startup in 2011, and my boss was very forthcoming about the
financial health of the company. At one meeting, he showed the staff a lot of
positive numbers about income and growth year-over-year. I was the person to
ask about debt because I learned that assets equals liabilities plus equity.
(He didn't skirt the question, which is why I still admire him today.)

Even if this freshman ends up working for an international conglomerate, he or
she will be able to look at the yearly business report and get a sense of
what's going on.

------
hanshans
I'm a mathematician and an engineer. I have used mathematics to predict
weather for the US Navy, to work on nuclear reactors, to win more than 1
million dollars gambling, to do research for a hedge fund, to develop guidance
and control systems, to synchronize atomic clocks, and to do machine
learning/pattern recognition. Physics and chemistry were also quite useful,
but not as useful as the math.

If you are into math, here are the 100 most useful ideas and theorems in math
according to me --

[http://artent.net/blog/2012/11/27/100-most-useful-
theorems-a...](http://artent.net/blog/2012/11/27/100-most-useful-theorems-and-
ideas-in-mathematics/)

------
enraged_camel
Not a skill per se, but more of a habit: Googling everything first before
asking anyone else.

For example, I am considering adopting a kitten. Most people's impulse would
be to call up one of their friends who have cats and ask them what it is like
to own one. What I did instead when the thought occurred to me was going on
Google and typing in "should I adopt a kitten?" Within an hour, I had all the
necessary information to make an informed decision.

Same thing with troubleshooting pretty much any kind of issue, whether or not
it is related to computers. My iPhone has an issue where it turns itself back
on when I turn it off. Instead of taking it to an Apple store like most
people, I Google'd it and within 5 minutes found out that it's caused by a
hardware defect. Then I made a decision that I can live with it and don't want
to go through the hassle of getting it replaced.

Some issues are harder to handle this way. For example, I slept for 12 hours
straight once, and woke up with a bad headache. So I google'd "too much sleep
headache" and found out that it might be caused by multiple reasons, from
hormonal imbalances to dehydration. Next time I want to sleep for that long,
I'll see if hydrating myself periodically will prevent the headache. There
wasn't one definite answer, but I still learned something.

------
danabramov
I'm 20 now, I dropped out of the university a year ago and I never regretted
it.

I started programming at the age of twelve. Here's what I think was most
important:

\- learning to search the web crazy efficiently

\- reading classic blogs like Joel on Software

\- reading classic books, such as Code Complete, Refactoring, Design Patterns

\- learning to use functional programming primitives (map/reduce/fold);

\- breaking the habit of abandoning small projects and finally shipping
something, and maintaining it for some time;

\- maintaining a horribly-written application so I will never repeat that
guy's mistakes

\- making all sorts of mistakes (permature optimization, premature
generalization) so they would come and bite me later, making me more
experienced

\- having a lot of free time to _play_ with programming: glad I started while
still in school

But I realized the most important one was to _find a community_. If not for
internet forums, I would never have learned programming. I started by reading
a book about Visual Basic, heading to a local forum and trying to help
newbies, while still being newbie myself. That's how I learned. I would absorb
the forum culture, discover different tools and languages by participating in
flame wars, and later explore them and write articles to help other people.
I'd translate articles from English into my native language, learning new
concepts along the way.

StackOverflow disrupted this forum culture and I kind of miss it, although I
know it was never efficient.

------
Dove
My favorite way to determine whether my skills are up to date (and what to add
in the coming year) is to look at the "Who's Hiring" and "Seeking Freelancer"
threads, and tally up what people are asking for.

It _is_ a diverse field, though, so you have to filter it by what you're
interested in or good at.

~~~
wallflower
If you don't mind me asking, as a professional Android developer (as stated in
your profile), are you thinking of switch-hitting and picking up iOS? Or even
diversifying by going into something like single-page web design?

~~~
Dove
Both, actually.

I do periodically need to do HTML5 apps on Android, either through PhoneGap or
in a webview. I know most of what I need to in order to do that, but I'd like
to improve my general facility with javascript.

iOS... I am planning to learn a bit of iOS, but mostly as an auxiliary skill.
I am often tasked with porting iOS apps, so it helps to be able to read the
source code and understand how they're put together. And most contracts these
days want apps built for both Android and iOS. I don't think you can be a deep
expert on both systems, though, so I'd rather partner with someone for the iOS
work, and focus on being Really Good at Android.

I do perceive iOS as a relatively mature technology, though. Somewhere between
stagnant and contracting in importance. Android, on the other hand, is still
finding new uses and growing rapidly.

Web development is, I think, a good long-term investment, even if I'm using it
to build Android apps right now. iOS development is more like an enabling
skill, that I'm not looking to invest a lot in, and don't see myself doing
much with two or three years down the line.

The viewpoint might be a bit myopic -- I do reallyreallyreally like Android. I
like to think it's based on the contracts requests and trends I see, though.

The other skill I'm making an active investment in is web backend stuff. I did
some CGI back in the 90's, and that needs badly to be modernized; I get asked
for backend work on apps a lot. I'm studying Rails at the moment, but I will
probably have to hold my nose and pick up PHP at some point.

~~~
wallflower
Thanks for the detailed answer!

I recently asked a principal of a web design firm that does pretty good work
how to learn HTML/jQuery/etc. And he actually recommended Code Academy. As
somewhere to get started - to bootstrap your learning enough so you can do
self-directed projects. Really, I think I am going to have to buy 5 or more of
the top-recommended jQuery/CSS books just to get started (even if I don't read
them).

For iOS to Android ports, I recommend usually just using the iOS app (if it
exists) as a black-box reference model /specification for functionality. The
Charles proxy server [1] usually figures out any gray areas in the server-side
interaction. Having access to the iOS source code/understanding it isn't
always necessary unless there is some kind of shared library being used
(shrouded C/JNI). A lot of the more complicated iOS apps have lots of
CoreData/KVO-type/massive 3rd party library dependency like RestKit
infrastructure that isn't directly translatable.

The best thing about iOS v. Android is that usually iOS developers _aren't_
Android developers (as you pointed out). And it still flabbergasts me that
Android has won (75% and increasing market share worldwide).

However, personally I'm thinking of getting back into iOS - (Storyboards, GCD)
by doing small, small projects. iOS is still a very marketable skill.

When it comes to being 'Really Good at Android', I think you will get there.
Have you presented/taught Android yet? It does take someone who
reallyreallyreally likes Android to make the app look good (xml layouts,
arcane knowledge) and functional and smooth (no ANR). Do check out all of the
Google I/O talks if you have not already. The hardest part about Android v.
iOS is that the knowledge sharing isn't as open as it is in the iOS world.

Hope you can find someone to partner with. Usually our developers find other
developers that they like to work with semi-organically - by just working on a
number of other, larger projects and every once in a while, they gell with
someone and either start apprenticing the developer (assuming they are still
junior) or work with them as a peer.

Either way, it sounds like you are diversifying your skill set appropriately.

Finally, in case you get bored/need anything else to work on for 2013 - try to
teach some aspects of coding to non-coders (especially those who might have
the potential but not the understanding).

Don't forget to double your rates this year :)

[1] <http://www.charlesproxy.com>

~~~
Dove
_Really, I think I am going to have to buy 5 or more of the top-recommended
jQuery/CSS books just to get started (even if I don't read them)._

Consider taking a look at <http://safaribooksonline.com/>. They don't have
everything, but they usually have enough good stuff to cover picking up a new
skill. I think my IQ would drop by about 30 points if I discontinued my
subscription...

 _For iOS to Android ports, I recommend usually just using the iOS app (if it
exists) as a black-box reference model_

I generally do, and I couldn't live without a proxy (I use Fiddler 2). But for
some things, you really need the source. Error dialogs, for example; it's hard
to be sure, from testing, that you've found them all. Math formulas, input
restrictions. And you'd be amazed how easy it is to miss whole screens in
black box testing just because you never saw a particular button / made a
particular gesture!

It's more than that, though. It's good to be aware of whether they're using a
default UI control, or a library is doing something a particular way, but it's
the only library they have, vs. if they've carefully hand-coded a custom
component. It's easier to make the case for doing things an "Android Way" in
the first scenario.

 _iOS is still a very marketable skill._

Very much so! A year and a half ago, I think nine out of ten projects I could
bid on were iOS projects. Nowadays, most of them want an app built for both
systems. I think that'll be true for the foreseeable future.

I do think Android is starting to go beyond mere mobile, though, and that's
exciting. For example, on the front page right now is this:
[http://www.hardkernel.com/renewal_2011/products/prdt_info.ph...](http://www.hardkernel.com/renewal_2011/products/prdt_info.php)
\-- and it runs Android!

What'll they build with that? I haven't got a clue, but they're going to need
Android programmers to do it. People are starting to use Android touch screens
in non-mobile ways, too, and I've seen a contract or two for Android OS mods.

I expect there to be some technically-interesting, Android-only projects in a
year or two, and I plan to be ready. :)

 _Have you presented/taught Android yet?_

No, though perhaps I should. I keep meaning to make time to blog about my
experiences as a developer, and somehow there's just always too much else to
do. I need to be more involved with the community.

 _The hardest part about Android v. iOS is that the knowledge sharing isn't as
open as it is in the iOS world._

The docs aren't as good, either. The javadocs are good at telling you what
properties exist. The problem is that they'll list "android:alignBaseline" as
an option, and when you click for documentation, it says, "Aligns the
component's baseline." Sometimes I wish they had a big "Did Not Answer My
Question" button that caused someone at google to be hit with a foam mallet.
;)

StackOverflow is a good source of information, but you want to already have
some expertise to filter things. The solutions (being crowdsourced) sometimes
are false, or sometimes they technically work but are bad advice.

More than once, I've had to go source-diving to figure out how a standard
component or option worked. I'm thinking probably the next thing I need to do
to "level up" in expertise is get good at reading the Android source. Maybe
make some time to contribute to some of the auxiliary open source projects I
use a lot, like Robotium or Jackson. Maybe start my own; I have a couple ideas
for things that would make my workflow a _lot_ easier.

 _Hope you can find someone to partner with._

Yeah, I think I have. We're looking to do a few joint projects together in
2013. We'll see how it goes. :)

 _Finally, in case you get bored/need anything else to work on for 2013 - try
to teach some aspects of coding to non-coders_

Yeah, I've been meaning to do something like that. When I have time to do side
projects, I like to do educational apps for kids. I usually focus on math, but
I've thought about doing some sort of programming app targeting young
elementary school kids. I grew up on LOGO in elementary school and _loved_ it.

 _Don't forget to double your rates this year_

Man, I've doubled them _twice_ in the last six months. Theoretically, I should
be making more money. Practically, it's just been the opposite; I've been sick
too much to do good work. Funny thing about freelancing . . . you don't get
paid sick days. :(

------
axusgrad
Let's see... Algorithms and Data Structures classes were probably the most
useful for computer science.

The Software Engineering class was a great way to learn what happens when you
have bad/no management.

Technical Writing and the "Job Application and Interviewing" classes might
have been the most useful long-term, though.

~~~
bcjordan
What were the most useful things you learned in your job application and
interviewing course?

------
ibejoeb
I was told by a very resourceful man that undergrad is about learning to read,
and he hit it. Your student can do that by taking a class in a subject that's
pretty unfamiliar and getting an A. It requires reading and finding answers.

It's amazing how many problems can be solved by RTFM.

------
japhyr
I just wanted to add a plug for a good physics class. A solid grounding in
physics will help you think about any phenomena you encounter throughout your
life.

I have been teaching middle school and high school math and science for 15
years. I have been asked all kinds of questions, high-level and low-level
questions. I have been asked many questions that I could not answer; but I
have been able to give every student a good idea how to start thinking about
their question in a way that would lead them to a fundamentally correct
answer.

Disclaimer: I was a physics major in college.

------
gyardley
Negotiating.

~~~
Zikes
It was many a used car before I got this one right.

------
peterchon
If you want a specific class, I would say creative writing.

If you're looking for skills in life, mine is being able to let go. Especially
at work.

If you work for someone else, you HAVE to remember that your work needs to
satisfy someone else. So throw away your ego, and listen (and pay attention)
to criticism. You should never be afraid to speak your mind and take a stance
but at the end of the day, you need to be a team player.

------
housel
Of the skills I learned in college, the most useful have been 1) spoken
Mandarin and written Chinese; 2) data structures and algorithms (as many have
noted); 3) reading electronic schematics and digital timing diagrams; 4)
proficiency in vi and emacs; 5) Unix utilities and shell scripting (if you'd
told me in 1985 I'd still be using this 27 years later I would have been
surprised).

------
adventured
1) Unrelenting persistence 2) Unrelenting persistence 3) Unrelenting
persistence

Just keep getting back up. You'll probably win eventually. Probably.

------
orangethirty
1\. Managing my health. Includes eating healthy. Refer to the post by edw519
in this same thread.

2\. I know how to sell. How to really do it under pressure.

3\. I know when to stop and smell the flowers.

4\. I can take apart/fix anything and put it back / fix it with no issues.
From deep fryers to washing machines and back to motherboards. I can fix it.

------
lsiebert
Meta cognition... Thinking about how I'm thinking, how I'm programming etc.

The ability to take a step back and say to oneself, "why am I thinking this
way? Is there a more fruitful approach?"

On a related note, preparing for screw ups. Learning to make mistakes, and to
assume mistakes will happen.

------
pablonoel
The extrapolation of knowledge, so you can learn and solve problems trough a
previous set of skills

------
jorgeleo
The ability to abstract, and play with those abstractions without having to
materialize them

------
Oflameo
The most valuable skill I have is literacy. If I didn't have that I wouldn't
even be able to know what your question was in the first place. I also
couldn't do anything I didn't actually see or haven't been directly written
into my genes.

------
sixQuarks
Knowing how to market is the highest-leverage skill you can have in any
industry

------
bmuon
1\. The ability to research a topic to any depth. My high school was specially
good at teaching this skill

2\. As someone living in a developing country, learning to speak English
opened the most doors

------
peterhi
Lying is a skill few people appreciate but it can be invaluable.

------
Locke1689
A strong command of my native tongue and a mathematical mindset.

------
debacle
The ability to delay an emotional reaction during an emergency.

~~~
onlyup
I wouldn't see this as a strength but as a standard. Being emotionally
unstable is a weakness.

------
dotborg
whatever I do, I do it with passion

~~~
j51991
NETWORKING

------
mransing
Moving to plan B without panic.

------
looser
Philosophy.

------
dschiptsov
Ability to learn (to extract and apply knowledge on the go).

