Ask HN: What was your “why didn't I start doing this sooner” moment?

630 points by throw94 ↗ HN
I read a similar thread on reddit (https://www.reddit.com/r/AskReddit/comments/4v3ts4/what_was_your_why_didnt_i_start_doing_this_sooner/) and thought that it would be interesting to know such moments from the HN community!

784 comments

[ 2.7 ms ] story [ 338 ms ] thread
For me, it has been reading books. Although my reading speed is very slow right now (hopefully it will get better with time) but i still manage to read a book every month. So much to learn from them :)
What kinds of books have you found yourself reading? Fiction? Non-fiction?
Mostly non-fiction right now as my reading speed is slow and any good fiction book will probably take a lot of time.
My reading speed is slow and my to-read list is long. I used to force myself to finish every book I started but now I'll happily give up on anything that doesn't grab me fairly quickly.

I've also been working on only adding things to my list that I actually want to read and avoiding books that I add only because I want to have read them.

Is there a title in particular that triggered your interest in reading?

I started by reading Zen and the Art of Motorcycle Maintenance. Reading it was such a wonderful experience that I have read 2 more books since then. (Started reading 3 months ago)
100% agree that the point of reading is not anything to do with finishing books!
Learn to speed-read by learning from a couple of speed-reading books. I recommend the Evelyn Wood system to get you started.
Functional programming

Sleeping 8 hours a night, even when behind on work

I've been struggling with the sleep as well.
Research sleep hygiene, for starters.

Set yourself a "no screens" curfew every night. After that time, don't touch anything with a screen (or anything else that causes stress and mental stimulation). I set mine about 2 hours before I go to sleep.

I use that time to clean, cook for the next day, read, and walk my dog. I often think about increasing it to 3 hours, since it boosts my quality of life so much.

Programming. Started at 19. Wish I would have started at 10.
It quite possibly might have held you back.
Why so?
Language choices available at the time and/or locking in bad habits which made sense as a 10 year old, but not so much as a 19 year old.
Totally agree. I started "programming" at an early age which just made me feel like I didn't need to pay attention when I took actual CS classes. The results were that I missed out on learning a lot of lessons the easy way (in school) and had to learn them the hard way.
Getting past Excel and learning SQL and then Rails
Running... outside... I didn't start until I was like 26. It feels great.
Lucky people who felt the joy of running immediately. I tried to start running many times. I got myself to 5k. But I hate it, it is boring, and just about any other physical activity feels better than running for me.
Have you tried bike riding, like with a good road bike? I find it a great deal more fun and exhilarating than running ever was.
Yes — hated every minute of riding uphill.

The greatest outdoor activity I ever had was skateboarding (I am 33, and started two years ago) — I really really loved it, could do it for hours, learning tricks and just moving through the city — right until I broke my ankle. :(

> it is boring

It might not work for you, but for me, the joy in running comes from using that time to let my mind wander. Sometimes I use it to think about work and sometimes I just daydream. It can be a great meditative conduit.

I would suggest you to try swimming. So much fun compared to running .
You might try adjusting your pace some. If you are 100% spent after your runs you should slow down a lot and see if that helps. Alternatively, if you aren't dying at the end of your runs maybe try and run a little faster. A fun workout to do is to start slow and warm up for 1-2km then pick out a landmark that is relatively close like a telephone pole or a tree and then sprint to it. Once you get there show down to a recovery pace and pick out another landmark at which you begin sprinting again. This is called a "fartlek" it is characterized by sprints and recovery periods that are irregular distances. You are not sprinting for 400m every time.
I run for 45-60 minutes and it's perfect podcast time. (I only enjoy running on the treadmill, so earbuds are no safety hazard and I can tune out the standard exercise music in the gym.)
I wish I played street fighter earlier than college. Programming I've been doing since fifth grade. I think that's early enough
For me it was psychotherapy / dealing with both my physical & mental health.

I now meditate 2x a day, run, and lift weights.

Any advice on how to seek it out? I'm at the point where I want to try it but I don't know exactly what to seek out. Should I talk to a general practitioner and get a referral? Just google some stuff and pick somebody close to me? Any kind of "yelp for therapists"?
Your insurance may or may not require a referral and may or may not restrict the available mental health professionals you can see, so check with them for their policies first. No need to be shy about it; they'll see the bill after your clinic visit anyway.

Finding a mental health professional is kind of subjective, so recommendations are not necessarily helpful. (Do pay attention to negative ratings though.) Even the most qualified ones can't help you if you don't "click" with them, so you may have to shop around a little. Don't be shy about switching if a psychiatrist or therapist isn't working for you; they're used to it.

Lastly, and this is my opinion only, if you have a teaching hospital nearby (e.g. at your nearest major university) with mental health services, you probably have a better chance of not getting a psychiatrist/therapist that's incompetent. No guarantees but a better chance. (Depending on your confidence in this thesis, it may even be worth paying out of pocket if they're not in your insurance network. After all, what is your sanity worth?)

Good luck.

Every time I start seriously exercising this hits in about week ~4. Sadly, I only generally keep it up for 6 months before falling back to old habits.

Professionally: email lists. If you have any reason to have a blog, you should have an email list. It surfaces the identities of the people who are actually interested in what you have to say, and ties people to you much, much tighter than "Oh yeah, that thing you wrote in 2011 that I read, that was a cool thing."

Businesswise: man, so many things could go here. How about "Put our sales process in a flowchart and execute from the flowchart, not from I'm-smart-and-can-extemporize-in-real-time. Adjust flowchart as required." Relatedly: answer common objections once, offline. Cache the answers. Repeat back from the cache, not from "best halfway decent thing you can remember to say in real time."

« Relatedly: answer common objections once, offline. Cache the answers. Repeat back from the cache, not from "best halfway decent thing you can remember to say in real time."»

Can you elaborate on that? I'm wondering to what situation you are referring to and what kind of objections you mean here?

Surely you've seen it here on HN. People will find a way to bitch about anything. Criticism is a signal that people care about the issue you're trying to address, but you've just failed to communicate your values correctly. Turn that criticism into an opportunity to correct that failing.
Sales objections. "Your software sounds good but $199 a month is high." "recite answer we have prepared for this thing we hear 3 times a day"
Ah thx for the clarification. That makes sense indeed.
Applies pretty much to anything. Basically, it's a self-maintained FAQ, and you realise that the first law of the FAQ is that people won't read the FAQ (well, some do), but you can point them there when they ask a FAQd question.

I've approached this variously and at different times on stuff I blog, mailing lists, or just maintaining my own offline factoid / response collections. A filebase you can quickly query and recall is good, my current subreddit is useful as I can keyword search it and pull up articles for reference in other discussions.

A real key is that not only do you not waste time on repeated answers, but you get the opportunity to improve your responses. If information changes, or you find a better reference, or you see (or come up with) a better argument or example, you can include it.

I've applied this in programming, hobbies, economics, politics, and other fields.

> email lists

Yeah, these can be great. Don't, however, be aggressive about it. Nothing turns me off faster than being a paragraph into something to have the page dim and an overlay appear asking me to sign up for email updates.

Also, if you have a blog, offer an RSS feed.

The reason people do this is that the list gets bigger far faster.

Don't make decisions on aesthetic sensibilities alone.

I think the opposite approach is better. One list I'm on unsubscribes you every year and if you want to keep getting it, you have to resubscribe.

Another has tracking and if I don't read the email, after a few months I'm unsubscribed.

Bigger isn't necessarily better.

woah. What kind of lists are those? How do you benefit from having fewer readers?
I'm currently at that 6 month point in my exercise program for about the 5th time. Anybody have any hints for pushing through it?
What works for me is exercise that is also really fun (I skateboard).
Someone else suggested below to get a personal trainer just to get over the hump. Alternately, schedule firm dates to exercise with someone else as a change of pace.
For me, seeing progress towards my goals is very helpful. This can be snapping a photo once/week in a mirror, recording your lifting progress, etc.

Another big aspect is sustainability (just like with your work life). You can make yourself train really hard for 2 hour workouts, 6 days a week and see massive progress, but once the progress starts to plateau it will be very difficult to stay motivated if your workouts aren't actually enjoyable. A good workout partner will give a lot of encouragement and enjoyment out of workouts.

Another option is to do activities that you find inherently fun - join a rec sports league, take up cycling, play racquetball, etc. Rather than zone out playing video games or watching TV, put on your headphones and go for a hike. Variety is a good thing.

What's your motivation for exercising? If it's for its own sake, or just yourself, it can be very hard to maintain (my gazillion attempts at starting in the past demonstrate this).

Find something to exercise for. It's not: I want to exercise for me. It's not: I want to exercise to exercise. It's: I want to exercise to reduce my cholesterol so I live past 50. I want to exercise so I can participate more fully in (rec league sport, martial art, hiking), and not be the slow guy that gets gassed after 5 minutes. I want to exercise so I can keep my weight under 200lbs (creeping back up, but that was adding in a strength routine so good weight, waist is still slim). It can be vanity. It can be to take care of someone (ever had a sick or injured friend or family member and been unable to help them move? It's not a pleasant feeling, they need help and you're there but can't offer it.).

If you want better luck making the exercise (or any other) habit stick better. Try one or more of the following:

* reduce the habit down to a ridiculously small subset of the habit. Eg. "I will floss every day" becomes "I will floss my upper, front two teeth". Or "I will exercise every day" becomes "I will change into my exercise clothes and step out my front door.". You don't have to floss all your teeth... just one. You don't have to actually exercise, just change and step outside

* put the habit trigger (your floss, your running shoes, whatever) where you have to trip over them during your regular routine. Eg. keep your exercise clothes on the chair where you sit to use your laptop or watch your tv

* put up a calendar where you have to see it every day (like at the dining table) and a red marker on a string (so you can't "lose" it) and make a Seinfeld chain

* enlist the aid of your family and friends. "Spouse... I'm doing this thing that's hard for me. I need you help. Please help me. And let's have a reward... if I [perform habit] for [reasonable time period... say daily for 6 weeks] I will take you to (or make it possible for you to) do [some activity spouse likes but doesn't get to do often]"

* have a big reward to work towards, but also lots of little rewards along the way to reenforce the good behaviour. Just make sure they don't undercut the habit

* make a consequence for failure. Something that won't really hurt you but will definitely sting. Make sure your friends and family know about it so you feel social pressure to go through it. "If I break the chain more than twice, I will publicly donate $1000 to [political party that I hate]... and the money will come from my budget for [hobby I love]"

* remove triggers for the habit you want to replace. Eg. If you want to eat healthy, then remove all non-healthy food from your home... don't hide it, don't put it somewhere out of reach so it will be inconvenient... get rid of it completely

* don't give yourself any wiggle room. Make your rules absolute. If you think you need an out (eg. might need to break $diet_plan due to business dinner) then explicitly give the authority to someone you trust and who has an interest in your overall success. Eg "I will strictly follow $diet_plan. My cheat day is Saturday when I can also eat [list]. Any other time, $spouse (or $friend) has to agree. Even so, I will stay within the following limits: $list"

* Plan out in advance how you will handle the curveballs that life throws at you (especially important to learn from the ones that caught you the previous times). How will you respond to $X? ... Decide now instead of hoping that future you will be able to detangle from the stress of $X enough to think clearly

* Take on only one habit at a time. Start the next improvement only after the current one is firmly entrenched. If you have more then one, choose the one that makes the other ones easier

TL;DR; Assume you will be weak. Assume that it will be hard to walk the path of $good_habit and fall back into $bad_habit. Do everything you can now to set future you up for success by removing decisions, removing temptations, getting help from others, and making it more painful/embarrassing to give up than it is to simply do the new habit.

That sounds very similar to BJ Fogg's tiny habit's program. He adds in the idea of tiny celebrations and doesn't talk much about consequences or including other people. But he runs a free email program nearly every week that you might be interested in. http://tinyhabits.com/
Great tips - I especially loved the 4th one. Thanks for writing it up.
If you have any reason to have a blog, you should have an email list.

Is it better to write posts for a blog than an email list, then? I feel it's better for someone relatively unknown to start out with a blog, then perhaps switch to a mailing list when you're better known. (Case(s) in point: you, Jason Calacanis, etc.)

It doesn't have to be an either-or thing. Use the blog to collect emails, then send occasional announcements / links or particularly high-quality content via the email list.
Hey Patrick, I posted this on another thread, but try focusing on flexibility first. Strength will come later. You can pretty much always stretch and will start seeing feedback. If you get into a routine, you will feel MUCH better and more alive.

Click through for my last comment.

This is very good advice. I've had trouble with flexibility for as long as I can remember. I've recently started some light exercise again and including yoga for just 5 to 10 min has made an enormous difference.
What happens in week 4?
His “why didn't I start doing this sooner” moment.
About a year ago I started moving towards not selling my time. It has taken a while to wind down all of those relationships, etc. but it has been the best and most lucrative decision I've made in my professional life. I now have just a single commitment where I sell my time and I've got it down to 2-3 hours per week. It will soon be zero as well.

I definitely wish I would have started this sooner or actually never started selling my time at all. I worked only for myself for the first 5 years out of school then the last 5 mostly for others (as a contractor - never an employee).

What do you sell now instead of your time?
This is an excellent point. Can you give any more detail on what you are doing instead of selling your time? I don't want specifics per say, just general ideas about what you have switched to and how it has been lucrative. I find the idea quite interesting.
I bought a really small business in the translation industry late last year. Since purchase our monthly revenue has grown ~ 190% and we have solid plans to continue the growth. We have 4 people on our internal team, but everyone works remote and part time (approx. 20 hours/week) including me. Our main workforce is made up of freelance translators (about 45 of them at the moment). I handle development, marketing, strategy, etc. and the other internal staff handles operations and customer service.

Our translations are mostly used for immigration purposes so it is a really gratifying business as many clients go out of their way to express their happiness with our service. We are dead serious about our business though... lots in our niche are not, but I won't bore you with the details.

How do you handle the separation between home and work? I've noticed that when I am working for an hourly wage at a business I appreciate not having to think about work after I leave.
I've never really had separation between home and work. I started my first business in college and have worked for myself ever since. I've had offices/warehouse related to some of the ecommerce stuff I've done, but even then I'd work from home a lot. My brother is a developer at an agency that I sometimes consult for. They keep a desk open for me there too so if I want to work around people I'll go in there.

So there isn't much physical separation of home and work and there is really no mental separation either since I own my own business.

For the most part I'm able to turn it off when I need/want to. If I'm not feeling productive or just want to do something else I can set the work down and pick up a guitar, go work out, ride a motorcycle, go see a movie, etc. and not think about the work until I get back to it. If I couldn't do that I'd probably prefer more separation of home and work.

hey akcreek, I also recently started an LSP. I would love to ask you a few questions and talk more about your day-to-day working and how you are growing your business. We are moving slowly and could use some help. We would love to see what we can do to improve our work. If you wouldn't mind and you have the time, shoot me an email wcbirtwell@gmail.com . I would really appreciate your insight! Thanks
Actually learning how JavaScript works.
What finally got you to dive in?
I had a lot of "why doesn't this work" and "why does this work" moments. I knew there were gaps in my understanding, especially when I started developing NodeJS applications.

After I read "You don't know JS" I was really kicking myself for going so long without having a fundamental understanding of the language.

Do you have any recommended resources? I "know" javascript, but I feel like there's so much more to learn.
"You Don't Know JS" is a great resource to start off with.
I am reading the second edition of "The Secrets of the JavaScript Ninja" now and I am learning a lot of what goes on behind the scenes. Highly recommended.
Freelancing. Had I started just 2 years earlier (when I started grad school) I would have been able to knock out my debt much faster by the time I graduated.
Where do you live?

In SF, it seems most freelancers are in it for the lifestyle benefits, rather than the pay. When you factor in the lack of vacation time, no benefits, often worse career development and networking vs. working at a proper tech company (one that hires good people, pays well, encourages learning/skill development) it seems a losing proposition. But then, this assumes you have the right kind of companies around, which most people don't.

In London it's the reverse. Anybody who's any good at their job and has a few years of experience under their belt, would be crazy not to give contracting a try. You make almost twice as much as an employee doing the same job if you're full time, or you can choose to earn the same but take months-long breaks regularly instead. If you like variety or get bored quickly, it also allows you to justify switching jobs without anybody raising eyebrows on the short stints in your resume, because hey you're a consultant.

The downside is worse career/skills development if you're not careful (you need to keep up and go to lots of meetups), you tend to get hired for the same jobs as an expert and not ever move up the management ladder, also some of the best companies and top positions won't be available to you as an outsider (big tech names, CTO roles, early stage startups offering equity over pay)

I always find it instructive to look at how the economics of an employer/client align with the economics of the contractor.

Example: at mass-market product development/distribution companies (Google, Apple, etc.), the big money will be made on a great product launch. In that kind of situation, you need to find a way to get some equity or some piece of the big launch. This -- big companies launching scaled platforms to lots of people -- is how the biggest fortunes are made in tech. I find these places aren't great for high-$ contracting because the economic incentives are so misaligned, all the way up to the CEO.

If, on the other hand, the business is some sort of intermediary, like a realtor / ad agency / investment bank, or uses an agency model (lots of cash comp, little equity value, big cash bonuses but nobody's building anything with stock/ownership) that might be a better place for a contractor because they have the cash to pay, but, I have to question whether that's going to make for a satisfying career.

Surprisingly, the older I get, the more I realize how much (1) the salary-optimization game (vs. being part of a big company/product/launch) is a sucker bet in tech and (2) so much of life is about relationships, network, and reputation. I guess it's different from person to person, but, still, I've done contracting and I'm not going back.

I've lived a few places on the east coast basically, all lower cost of living. But I've been freelancing with folks in SF and Chicago, so the differential is in my favor.

I started freelancing in grad school, so I've pretty much always been moonlighting and choosing my own hours (in addition to the "day job" of grad school).

Using source control, specifically git. Programmed for a couple years before I got on board.
Using screen in daemon mode.

    screen -dmS myservice /blah/start.sh
Fit that line somewhere in a properly constructed init.d file and you're good to go. And if you need to execute a safe stop from that program through some interactivity:

    screen -S myservice -X stuff "stop\n"
And voila. It sends a line of text over followed by an enter key. Elegant, useful. You can reattach session to see what's happening at any time. Love me some screen.

When the process exits in that screen session, screen session is closed so that you can rely on screen -list.

Not to start a flamewar, but have you looked at tmux for this kind of thing?

"Daemon mode" is the mode for tmux, and the whole stack is designed to be extremely scriptable. "tmux send-keys" does what you're referring to, here, but essentially anything you can do interactively, you can do via the command-line.

Not to say you shouldn't just keep doing what works for you! But figured I'd at least make mention of tmux as an alternative... I'm a fan. :)

Ctrl-B is the _worst_ shortcut ever devised (which is why it is used rarely... except on tmux). Just _thinking_ about it gives me the pain. My hand hurts.

And yet, this is a default shortcut for command mode in tmux. "But you can configure it!" — one might say. No, I won't be doing it on every system I manage, I have better things to do.

Eh, fair enough. I just reconfigure it and move on, but I grant you that doesn't necessarily work for everyone. shrug
Have you ever tried using the alt/ctrl/shift keys on the other hand side? So for Ctrl-B you would use the right-hand pinky to hit ctrl and the left-hand index finger to hit B.
One of my "Why didn't I start doing this sooner?!" moments was copying my config files to all my machines.

It all started with less(1)... Configuring it is a pain in the butt. One day, I couldn't remember how to do it on a new machine, so I just performed the following command...

    scp ~/.*less* ~/*less* newmachine:
It was wonderful! Now I do the same thing for my emacs config, and my .xsession, and my hosts files, etc.
Many ways to accomplish the same thing in Linux, starting with a popen() call. ;) so thanks for pointing out tmux.

Since I use screen fairly often, it had never occurred to me (until fairly recently) that you can rely on it to start with a machine reboot -- and yet have the very familiar interface available to you when you want to intervene. Something to be said about muscle memory.

Learning the Sublime Text keyboard shortcut for commenting out the current line and other timesavers.
Declining to reveal my previous salary when negotiating a new job.

I ended up with a significantly better salary than they originally offered and never even said a number. Just built a good rapport with the hiring HR rep and agreed that the offered amount would be totally reasonable for [someone else with good experience]. Then I pointed out that I also bring to the role [additional, relevant, and desired experience] and gently asked what they could do to make the number better?. (Then I kept my mouth shut and let them think out loud for a few minutes)

I reckon if you don't do negotiation on a regular basis, learning to keep your mouth shut, as this post says, is the single best and easiest thing you can do to improve your outcomes.

When you ask your question (this one is great btw - what can you do to make that number better), the other side may, subconsciously or (for more experienced negotiators) consciously just say nothing for a while. They're waiting for you to crack - to immediately fear the silence and blurt out something like "if that's possible of course" or "it would really help me, I've got 3 kids to feed". Following up your own ask with an immediate mini-backdown like this - without even making them say their piece - will lose you $.

Just wait. Silently. Lock eyes with them, not aggressively or weirdly, but patiently. After ten seconds (which may feel like 60), if the heat gets too much, raise an eyebrow slightly, clasp your hands, something.

Nothing's guaranteed but if you can do this you'll get better outcomes more often. And that's especially true on larger deals with very elastic prices (like selling an expensive piece of software) than something like your salary which often has real and hard bounds around it.

Keeping one's mouth shut after asking a question is a great skill in general.

When buying used cars, I will often just ask, "Is there anything else I should know about the car?" and then wait.

It's also good for extracting confessions ("What can you tell me about this broken cookie jar, son? [long pause]").

I'm not a dishonest person in general, but I have zero problem with lying about my previous salary in order to gain a negotiating advantage. I feel that it's simply none of their business how much I used to make, and that if they're presumptuous enough to ask then a made-up number is what they deserve.
Except the company that hired you can then request a w2 and see your previous salary
They cant demand that. If anybody tried to pull that I would be outta there.
This. Always add on at least 15-30% if they ask. Has worked very well for me.
Lying about your previous salary may open you up to a lawsuit. It's sort of a grey area, but some consider it fraud.

http://bucks.blogs.nytimes.com/2010/06/18/is-it-illegal-to-l...

I think that realistically it would only come up as an issue if you were looking a c-suite position. For joe or jane programmer, I doubt they would go through the effort of taking you to court in the unlikely event that they found out about it.
Hmmm, hate to admit this: Use a Mac for work rather than Linux. The unixness combined with availability of the likes of MS Office, together with the genuinely beautiful interface has really increased my throughput.

Secondly: Doing 1.5 hrs exercise daily.

Coding on the same platform that I deploy to has increased my productivity.
For me, it's using Linux instead of Windows for coding (at least back then when I was learning to coding). It was so much easier to start a quick C++ project using an editor and g++ than fiddling with VisualStudio. Not to mention Python.
Even just for daily, non-project use, nuking my Windows install was the best thing I've ever done to my computer.
So... describe the moment.
Not OP, but for me it was purchasing a laptop where every single component had Open Source, in-mainline kernel modules, significantly losing out on performance, and then STILL compositing didn't work on an external monitor.

That was 8 years ago, really enjoyed using Macs since. Now Apple quality is going down, and powershell is getting really good, slowly moving to Windows.

That's a moment I think a lot of us can relate to.

I love Linux/Linux-like OSes. I also like stuff working without having to tinker with it--not that I dislike tinkering (it's great fun) but time is more of a factor now than it used to be.

I've used Linux full-time for 11 years; booted into Windows about once or twice a year to try out a game, and had a Windows VM for photo editing (DxO doesn't work in WINE, and afaik, there are no good replacements for it). Just a couple of months ago I switched to Windows as the host OS and Linux in a VM running in the background 24x7 (off the raw disks, so I am virtualizing the same system that I ran as my host OS, which meant I didn't have to spend time re-installing and re-configuring everything).

As a long-time Linux die-hard who passed so many applications by because they didn't work well in WINE and/or virtualized Windows, it pained me to switch, but Linux is much more cooperative as a VM than Windows is (and it also pains me to "reward" Windows's bad behavior with the position of host OS). With appropriate tweaking (Dexpot) and a good terminal (ConEmu+Cygwin for SSH to my VM), Windows is basically just like a DE that can play new games (Overwatch, woot!) and run my photo editing software 5x faster than it ran in VM.

Seems like OS X is the perfect solution to this. I used Linux on the desktop exclusively from 1995 to 2002 but haven't run it on the desktop since. (I still manage fleets of Linux servers of course).

I simply don't see any value in desktop Linux for my job, and using Windows makes it too hard (like trying to build a ship in a bottle).

YMMV, of course, depending on your work.

I've had occasion to use OS X here and there over this time period, and unfortunately I don't think it's a great solution.

The first problem is that I'd be locked into Apple hardware, which is not something I'm interested in. Nothing personal against Apple hardware, as there are certainly pleasant things about it, but it's not what I want. For example, one of the only reasons I can do this is because I have a custom x86 build that accommodates it with a lot of disk space and a lot of RAM.

The second problem is that I've found OS X kind of inhabits an uncanny valley, where at first glance it looks great, but after using it for a while, you find a lot of small tics that are offputting. It does provide some nice traditional star-nix utilities and has some POSIX compatibility, but many things seem to have a bunch of little problems and incompatibilities that one has to get in there and address if the project doesn't already provide a Mac installer that does this for you. This may not sound like a big deal, but sometimes these "little incompatibilities" are showstoppers and sometimes they just take extra hours to get working. And each year, OS X is getting worse; the compatibility takes a hit, the system gets more and more locked down, and sometimes management scripts have to be totally rewritten.

The end result of that is that many of my colleagues that use OS X end up with a very similar setup to mine, where they have a Linux VM running in the background 24x7 to provide those needs.

Thirdly, OS X is a neglected middle ground in terms of testing and application compatibility. Devs prefer to work on Linux and users prefer to use Windows. That means that user-oriented applications, like new games, always work on Windows and that most dev-oriented applications work on Linux (and many depend on Linux-specific functionality like the proc subsystem which make it more difficult to port BSDs or OS X). Even if the code is compatible as-is on both Linux and OS X without changes, OS X is often the least-tested platform for relevant applications. I know there are a few vendors that release Mac versions of their games, so there is frequently a bit more availability on OS X than there is on Linux, but it's far less than there are on Windows.

I don't really see what I gain by using OS X instead of Windows. With Cygwin, I have star-nix utilities in Windows too, and I get immediate compatibility with practically every user-oriented application out there.

If you don't mind going a little deeper on this, what program do you use to run your VM? Do you only access your VM via SSH? What kind of development do you do? Do you have an internal IP for your VM or do you just redirect the ports?

Do you think you could replace your VM with Bash on Windows?

>If you don't mind going a little deeper on this

Sure.

>what program do you use to run your VM?

I use VirtualBox. I want to try VMWare, but I'm doubtful the difference will be very significant. I tried VMWare to host a Windows guest back when Linux was the host OS in hopes it would run DxO fast enough. While it was faster in some things that Virtualbox did slowly, it also did things slowly that Virtualbox had no trouble with, making it a net neutral, and not worth the license cost. If VMWare had full DX11 acceleration, it would've been different.

You can do raw-disk passthrough with VBox by creating the appropriate files with VBoxManage. Must be careful with this, as there is a risk that you can destroy the data on the original drives. I do this so that I can switch back to Linux as the host OS without hassle, should the need arise.

>Do you only access your VM via SSH?*

I primarily access it via SSH, but the VirtualBox windows are on a secondary workspace and I can switch over and start an X server and have my full desktop environment should I need it. I try to avoid the need, but I have done this a handful of times since switching in order to access or run graphical programs.

I've found that VirtualBox's 3D acceleration doesn't work properly. It was a pain to get it to work properly on my Linux system (which runs Arch) in the first place, but once I did get vboxvideo loading and glxinfo reporting Chromium as the renderer on a semi-consistent basis, the desktop environment would suffer corrupted draws that make it useless. I turned off 3d acceleration in the VM settings.

>What kind of development do you do?

Kind of all over the board. I maintain applications in Python, Ruby, and Java. I scratch my itch with other software which leads to occasional C or C++ development. I administer many servers and make use of Docker, Kubernetes, Ansible, and other devops stuff.

>Do you have an internal IP for your VM or do you just redirect the ports?

I have it configured as bridged network and it has an internal IP and acts like a separate machine on the network. This was important because many things in my home environment are dependent on my workstation and have that IP hard-coded (DNS is not justified for my house yet).

I have a Samba server running in the VM and exporting the frequently-used local filesystems, including my home directory and some btrfs storage (bulk storage goes on a separate Synology NAS, so I access that directly from Windows through its own smb server). My past experience with VBox's Shared Folders is that it's pretty unpredictable, and that it's usually just better to use smbd.

>Do you think you could replace your VM with Bash on Windows?

I wanted to try Bash on Windows, but it said I had to be part of the developer preview program, which I didn't want to do since it apparently involves registering with Microsoft and a bunch of similar stuff.

I am optimistic that Bash on Windows may be able to take some functions out of the VM, but I don't think it will be able to eliminate the need for it. It would be nice if it could replace Cygwin.

Switching from employee to freelancing had the biggest impact in my professional life. It's not for everyone but definitely for me.
I have been thinking about doing this for a while now but don't quite know how and where to start. Do you have some pointers? I have seen this posted a bunch of time by various people but never really got up to asking them.

Things I am uncertain about: * Organization/Admin set-up required to get going with me being the only person * Finding programming projects, clients * A good hourly rate to be charged

A little about me: I have been working as a Software Engineer for a few years now with a very good understanding of python, java, C/C++, javascript (learning React these days), databases, bash scripts. Have some experience with elasticsearch, big data (hadooop/hive), scala.

My steps were :

1. Save enough money for 3 months before I quit

2. Start looking for freelancing projects locally by asking companies that are looking for employees in my area to hire me as a freelancer instead of an employee

3. When you have 3 "yes, we can work with you on a freelance basis", I quit the company and approach the three of them until my first working day in that company.

I'm pretty sure these depend on your location ( I'm living in Berlin ), so you can ask around in some freelancing meet-up how can you start.

After 12 years of coding professionally, move from development into product management/ownership.

It's like playing an instrument versus playing the orchestra. It ain't for everyone, and I won't claim I'm particularly good at it, but it's a fascinating new kind of creativity.

Who's doing the coding now? How does it feel to you if you have to "outsource" it and pay for every small bugfix?

I'm asking because on the one hand, I enjoy coding. On the other hand, it might make sense to work ON the business, not IN the business in the future.

I'm a Product Manager inside a software company, which means I work with an internal development group to actually execute my ideas (certainly some POs/PMs work with outsourced staff, but that's not the case here, with the exception of one product where the outsourced staff are largely treated as direct team members, so the dynamic is largely the same as with our internal staff).

That means my job turns into talking to customers, collecting requirements and authoring user stories, prioritizing the backlog, and generally giving the developers all the information and guidance they need to build (what I hope is) the best product we can, with the right feature set, executed with the right timing.

Of course, I still enjoy coding, but what I enjoy about coding isn't the hammering of the nails, but rather building a finished product from which users gain benefit. In that respect, what I'm doing now is leveraging an entire staff of people to achieve a vision I couldn't possible deliver by myself, which is pretty damn cool!

The role itself is multi-disciplinary. I have to understand the technology in order to adequately gauge cost and complexity, technical tradeoffs, and so forth. But I also have to understand the business impact of those decisions, and the way those decisions affect the customer.

In my particular case, we're in a B2B environment where we do deep technical integrations as part of product deployment. So my customers are individual business owners and technical operations staff that I interact with directly on a very regular basis (as opposed to, say, a consumer product where you're dealing in aggregate customer behaviour).

Commuting by bicycle.

Fresh air and exercise, all packed into the same amount of time it would have taken me to drive and park, even enjoyed the thrill and mental challenge of forcing myself out in the rain and snow. Took some shortcuts and explored areas I've never been to before.

Same here. I was cycling a lot until I got my driving license. Then it was only 10-15 later that I got into the habit of using my bike again. The less I use my car, the happier I am. Now I really wonder what prevented me from doing it sooner!!
Same here. Living in a city with many hills it was a chore at first. But now it's pretty great.
I need to get back into it. I'll bike to work for a week or two, then fall off the wagon. That said, I LOVE cycling, have always loved it, and am glad I rediscovered it a decade or so after getting my driver's license.

I still love cars, a huge hobby of mine, but I actually enjoy them more when I'm not driving every day.

The great thing about biking is that it opens up your route options. Almost any street is as good as any other - you'll make just about the same time on a residential street as a main street, so you have an almost infinite variety of options without much sacrifice in team.

Contrast with a car, where taking side streets will slow you down significantly.

What about sweating?
It's summer here. Even so, in the morning it's cold. When I get back is hot but I arrive at home and take a shower.

Then it depends on how you bike. Most people use a too low speed. This is like driving a car in first gear all the way to work. You will sweat. I use the highest gear comfortable. If it's too high my knees hurt.

Another thing is to find a slow constant rhythm. Do no "accelerate" on a bike. You will use a lot of energy and so you will sweat.

For my own particular case, I would have been getting soaking wet on a regular basis anyway from rain, so I showered and changed in a gym near my workplace that rented lockers. But in certain climates, and cycling cultures you can just go slowly, same as how in certain happy circumstances people can walk to work without having to change into Lycra. (Some people do commute via jogging, and that's cool too)
Learning Python! I've been a C#/Windows developer for years. I then switched to Ruby, which for some reason inevitably means you switch to a shiny mac, and then your work paradigm changes revolving around the command line.

One day a quick task came up, and I decided to hack it out. The only library I could find was a python library, so that's what I used... and it was so quick to get something. 10 lines later my boring task was done. Impressed, I started looking for other things to put this new super power of mine to work, and it's been spiraling out of control. I still use the other languages I know for the majority of my work, but things I might have just never done because I wouldn't have had time are now getting done. It's so great to get things done.

This is good to hear - I recently graduated and took a C#/.NET job (which I enjoy)...but Python and CLI work always is more enjoyable for me than the MS stack. A big worry of mine is not being able to switch between languages, and getting ~stuck~ with one.
I'm a C# developer at the moment, but I use Python at work for pretty much anything regarding parsing or file manipulation that I need to do, or to hack out a quick proof of concept.
Python is so great for getting small tasks done in less than 30 lines of code that would take 5-10 times as much code in most other languages. I wish I had learned it earlier too. Still my favorite language to code without an IDE (C# is pretty great as long as you're in Visual Studio).
I wish visual studio wasn't a requirement sometimes for writing C# - although it makes make it a decent experience.
Well, it isn't. But you need to have autocomplete for a better experience.

There's Xamarin and other IDEs as well (I'm sure there's an Eclipse plugin but I wouldn't go there)

There's Project Rider in the making.

Xamarin Studio - based on my experience from about 4 months ago - is beyond awful at the moment

Bah! IDE's seem always to be stifling, and they create complicated projects that are not readily usable outside of the IDE. For instance I often need to build software on a server, and naturally do not wish to install some enormous program to accomplish this. I don't use Eclipse for Java or Visual Studio for C#. I did not use the Racket IDE when I was writing a lot of Scheme code. I do like the new Visual Studio Code editor however. Caveman that I am, I use plain old makefiles.
I remember when I first learnt Python. It seemed so similar to the pseudocode that I was taught to write first when I was working on a problem. As a result, I will often prototype an algorithm first in Python before I try it in something else.
These stories are great. Java dev here. I love that you can do almost anything with it but this is such a strong case for deciding on Python as my second language.
To the parent, and all the siblings of this comment:

If you're fast/productive in C# and you're looking for a good way to accomplish quick tasks or experiment, LINQPad (http://www.linqpad.net/) will become your best friend very quickly. It would probably be faster to list the things I don't use it for than the things I do. The premium license is worth every cent.

My breaking point came almost a decade ago, but it was a similar story. I tried ruby out of frustration, and in a single afternoon as a brand new ruby developer replaced a week's worth of date parsing code written in c++. Easy integrations of regex, a repl, nice text parsing, etc. I've never looked back. The only downside is the rest of the world discovered ruby and python so I can no longer just be a 10x developer by not using windows/c++/mfc.
I wrote a client/server crypto system on Windows. The client was in C, the server code in Python. The Python code took maybe 5% of the time for a similar amount of functionality as in the client. No discernible performance impact from using Python. C was not in of itself a bottleneck in this case, rather the complexity of the Windows crypto API was.
1) using git (or source control, more generally). One day, I figured all the devs (most better than me) around me were using source control. I asked a few why, and why I should use it. Now I realize I was treading a dangerous path before using git.

2) using the command line freely (ie : not being an expert, but being able to use it a bit and automate some tasks). At some point, I maintained several apps at once, and it became too much of a burden to do the builds myself and install it one people devices several times a day, every day, so I decided to use a CI tool (Jenkins). To do the builds, I had to learn how to do everything in command line, and that's how I got started (now I am able to handle my own server and do some simple sysadmin).

Since I have an IT degree, I blame my school for not teaching me both of them, which I picked up after graduating: not mandating source control is to my eyes a big failure, and while I had some Unix courses, they never taught me WHY I should take the time to learn the command-line (and thus, I didn't).

For #1+#2-- I'm also a convert, which is sadly still not as prevalent in my field (computational science) as it should be.

I always tell people: its a good 10% extra overhead you add to a project during design to be careful with regression testing and source control, and that is paid back many times the first time you avoid a dangerous bug or bad tarball that goes undetected for 3 months.

The `git` thing is huge for me, too. It kills me thinking back to all those CS homework assignments where I had a build working, but then broke it adding the next feature. Spend the next 4 hours frantically Undo'ing and copy-and-pasting from "copied folder" backups. That's no way to work. Source Control should be taught on day 1 of any CS class.
Goodness me... I've had discussions about this with local folks, and - it's all over the map.

I've had people with CS degrees confidently tell me all this stuff is taught - it's part of their classes from day one, and they know all that like the back of their hand. But only a few seem to walk the walk - others blank out on basic questions. Others from local community college "web tech" programs mostly don't even know what I'm talking about.

Documenting code, knowing how to document your regular activity in such a way that other team members and management have a clue what you're doing, beyond code comments. Decent commit messages, using an issue tracking system, ideally some project management tool, etc.

While many dev problems do stem from actual technical issues, far too many I see stem from poor communication between the team members and the external clients/stakeholders. Few devs, especially younger ones, have any clue as to how important those skills are, over and above the raw dev skills.

Writing programs that people actually use.

I was a hobbyist programmer for a long time. Then my father passed away, and I went through his computer and saw all these projects that would never see the light of day. That gave me the motivation to choose one project and see it through until it was good enough to have actual users. Programming is much more satisfying and meaningful now.

Do not overlook this comment. Between a flood destroying all of my physical property, a minor health-scare, a few far-too-early deaths in my friends and family, and having a kid, the concept of my own mortality is now firmly established. I started thinking about the few things I did have, and who would take them. I realized the vast majority of my "stuff" is parts and code for nascent projects. There are a lot of them. And they will get thrown away. They are valueless to anyone else.

So to me that means that I need to focus and do one thing at a time.

We are a sum of our parts and I probably wouldn't have as great of an appreciation for the time I have left if I hadn't wasted so much time. I still get a lot of time to code, but damn, my single 20s were a whole different world.

After supporting a side project that had hundreds of users, I was actually relieved to go back to projects that had at most only a handful of users. Support requests and demands for bug fixes can get tiring if you don't have an apparatus to help control and triage them.
I can understand how you feel. I made a chrome extension for fun and one of the user claims my extension has malicious tracking code and ads injector out of the blue (perhaps he got the malware from other extension and blame it on mine). Way to kill motivation :/
Did you finish that project yet? If so, would you mind sharing it?
It took two pivots to find a project I could "finish". I've been a math and science teacher for a long time, so my strongest projects are education-related. I spoke about a project that would allow people to write and maintain education standards on an open platform. People were really interested in that project, and it led to an invitation to write a book for No Starch Press. I outlined an intro Python book, and the proposal was accepted.

I spent two years writing, and Python Crash Course was published last fall. It's been really well received, which is tremendously satisfying. I've enjoyed the steady stream of emails from readers since it was published. Finishing the book has opened a number of doors, and it's fun to be working on a second career at this point. I like the mix of programming and writing.

No Starch Press page: https://www.nostarch.com/pythoncrashcourse

Amazon: amazon.com/Python-Crash-Course-Project-Based-Introduction/dp/1593276036/

I just finished reading your book. Too many programming books focus on answering "how does this work?" I like your book because it focuses just as much on answering "what can I use this for?". Good work and congratulations on having it published!
When a local company saw a talk I did and offered to sponsor the continued development of the open-source project I'm building. If I had started doing talks a year earlier, I probably could have picked up such a deal a year earlier. I missed out on a lot of great opportunities to get my name out just because I erroneously thought not being anywhere near finished meant I wasn't ready to show anything.

It's a really, really hard decision to make, to sink your time into something, and I can't recommend for everyone by default. Most people start projects on nothing more than a whim and will give up on those projects when they hit the technical-debt weeds. I don't think of that time as a waste, I think it's incredibly important to the learning process and I encourage people to start as many projects as possible. You just need to be honest and understand about yourself whether or not you're in it to win or just having fun, before you jump into a project head-first. I've seen a lot of people do that, and I've done it more than a few times.

This time is really different because this time I really have spent 2 years on the project and forced myself through multiple come-to-Jesus moments on my code. Everyone will have those sorts of moments as it's impossible to have such design foresight to predict all the ways you will want to use your software in the future, or that you won't change your mind on how you want to use it. And I think I needed to go through it to prove to myself that this was something I was going to be able to continue to work on. But I really wish I had known sooner.