Ask HN: What was your “why didn't I start doing this sooner” moment?
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 ] threadI'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?
Sleeping 8 hours a night, even when behind on work
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.
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 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 now meditate 2x a day, run, and lift weights.
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.
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."
Can you elaborate on that? I'm wondering to what situation you are referring to and what kind of objections you mean here?
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.
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.
Don't make decisions on aesthetic sensibilities alone.
Another has tracking and if I don't read the email, after a few months I'm unsubscribed.
Bigger isn't necessarily better.
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.
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.).
* 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.
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.)
Click through for my last comment.
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).
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.
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.
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.
https://github.com/getify/You-Dont-Know-JS
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.
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)
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 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).
When the process exits in that screen session, screen session is closed so that you can rely on screen -list.
"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. :)
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.
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...
It was wonderful! Now I do the same thing for my emacs config, and my .xsession, and my hosts files, etc.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.
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)
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.
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]").
http://bucks.blogs.nytimes.com/2010/06/18/is-it-illegal-to-l...
Secondly: Doing 1.5 hrs exercise daily.
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.
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.
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.
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.
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.
Do you think you could replace your VM with Bash on Windows?
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.
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.
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.
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.
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.
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).
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.
I still love cars, a huge hobby of mine, but I actually enjoy them more when I'm not driving every day.
Contrast with a car, where taking side streets will slow you down significantly.
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.
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.
There's Xamarin and other IDEs as well (I'm sure there's an Eclipse plugin but I wouldn't go there)
Xamarin Studio - based on my experience from about 4 months ago - is beyond awful at the moment
[1]https://code.visualstudio.com/docs/languages/csharp
[2]https://code.visualstudio.com/docs/languages/python?utm_expi...
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.
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).
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.
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.
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.
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.
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/
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.