Hacker News new | comments | show | ask | jobs | submit login
Ask HN: Most valuable skills you have?
51 points by bavidar 1731 days ago | hide | past | web | 68 comments | favorite
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?

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.


  - 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.

I think this advice can be extrapolated out too. Get to know yourself, and understand what motivates you, what makes you happy. Read the Happiness Hypothesis to get an idea for what contributes to a persons actual happiness.

The most successful, happy people are those who can manage themselves properly.

And as for the basics of happiness, it's very simple:

- have some autonomy over what you work on - have a social group of friends you spend time with - exercise - eat well - meditate or do cognitive therapy - spend time in nature

I try to do something from every piece every day. Finding a balance and forcing myself to do a piece from each has helped me prevent burnout for over 9 months now, and has made me happier than ever.

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.

>>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.

Probably not what OP was asking, but some of the most important advice a person can get!

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.

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.

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.

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.

>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.

Although I agree with you about learning to "estimate" being important, there's another very important thing that must come with it: learning not to trust them.

From my small experience, even better than estimating something right, was having the humility not to trust blindly our own instincts.

Don't get me wrong, one has to listen to her own "guts" many times in a life, and that's a good thing. A better thing is learning to recognize when you screwed up, and getting yourself out of that situation before it is too late.

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.

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."

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.

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

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.

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.

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.

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.

What skills have you acquired over the years that you deem most useful?

The ability to learn new skills quickly

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.

>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."

First, the ability to make people feel comfortable around you (which usually means actually being comfortable around them)

I second "the ability to learn" -- but be more confident and bold (this is an extreme):

“After Andy dropped out of Emerson College in his sophomore year, the [siblings] reunited in Chicago, where they started a construction business, learning most of the skills on the job. They once built an elevator shaft without any plans or previous experience, having projected unquestionable confidence to the people who’d hired them—not an unuseful talent in the film business.”

You can see the enormity of the undertaking, and the brass buttons it takes to say that, yes, of course you can do something that you have no idea how to do. Sometimes filmmaking requires that kind of absurd confidence (but don’t do anything that might make people fall down several stories or anything)."



> They once built an elevator shaft without any plans or previous experience, having projected unquestionable confidence to the people who’d hired them

Wait, was this for a film set, or was this an actual elevator shaft that people will be using to zip up and down a building?

Because if it's the latter, I'm terrified.

The latter, yes.

All major construction like elevator shafts is always inspected [1]. Since they are working on-site, the quality, speed, and scope of their (subcontractor) work is apparent and visible on a real-time basis. You have to know what you're doing - if you do not - worst case, you get someone injured/killed, best case, they fire you. Like the cliche goes - a contractor with shiny new tools isn't a contractor you hire. As for licensing, there are ways around licensing & bonding...

The point is they weren't just bluffing - they had supreme confidence they could do it. And did it. As someone who is scared to install a new faucet, who does that?

[1] They did the shaft in Chicago: http://www.sfm.illinois.gov/commercial/elevators/faq.aspx

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.

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.

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.

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.

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

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.

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.

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.

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.

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 --


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.

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.

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.

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?

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.

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

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... -- 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. :(

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.

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

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

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.

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.


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

Was going to say the same thing.

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.

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).

1) Unrelenting persistence 2) Unrelenting persistence 3) Unrelenting persistence

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

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.

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.

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

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

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.

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

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

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

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

The ability to delay an emotional reaction during an emergency.

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

whatever I do, I do it with passion


Moving to plan B without panic.


Applications are open for YC Winter 2018

Guidelines | FAQ | Support | API | Security | Lists | Bookmarklet | DMCA | Apply to YC | Contact