Ask HN: Most valuable skills you have?
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?
69 comments
[ 21.4 ms ] story [ 176 ms ] threadThe ability to learn new skills quickly
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)."
http://www.filmschoolrejects.com/features/6-filmmaking-tips-...
http://www.newyorker.com/reporting/2012/09/10/120910fa_fact_...
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.
http://www.wired.com/magazine/2010/11/mf_ticketmaster/all/1
Denny gave me an LZW algorithm from a magazine. It's the same code I used at Ticketmaster -- to compress or uncompress a buffer, basically out of the magazine. At Ticketmaster, I did full multiple file archiving with bloom filters and encryption. In SparrowOS, it's individual files.
My LZW applied to 16 color bitmaps is superior in every way to JPG. I get my own graphics compression out of a general purpose lossless algorithm built-in and applied automatically on files ending in ".Z"
I generate my web site myself. I use uncompressed BMP files -- big. I added RLE BMP compression, just for my website.
I don't need BMP file formats -- I have my own graphics format. I use BMP because it interoperates with Windows and the Web.
I'm not interested in multimedia -- more like old school C64 games.
With 16 colors, the standard formats are worthless. You might as well use loss-less.
I could write a phenominally compressed loss-less screen-cast format.
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
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.
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."
If I could trade in all of my technical know-how for the same amount of people skills, I would in a heartbeat.
It is a diverse field, though, so you have to filter it by what you're interested in or good at.
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.
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
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 ap...
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.
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.
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.
My variation of Greenspun's Tenth Rule is that Common Lisp contains a reimplementation of Scheme, with some added "features."
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.
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.
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.
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.
Just keep getting back up. You'll probably win eventually. Probably.
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.
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.
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.
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.
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 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.
Also, if all goes well, it gives you good ammo to tell in job interviews.
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:
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.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.
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.
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.
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.