659 karma · joined June 11, 2018
That said, it's just emotional on my part like I said in the OP. Yeah I knew people who were poor and who probably spent their entire life since that time doing drugs and collecting their assistance checks. (And to be fair I knew people who were rich and probably spent their entire life since that time doing drugs and collecting their monthly allowance. Both are far from the norm of the rich/poor people. They're just specific examples of not caring much about your life beyond it going on.)
I prefer to live in a world where five hundred thousand people are sitting on their asses doing nothing passing the seconds till their death through their own choices than in a world where fifty thousand people are running ragged feeling their bodies waste away not knowing where their time goes through the choices of people who just wanted a nicer lawn. The first world seems like it has more happiness per capita plus the outcome of each is a result of things like effort. The second world seems like it belongs in a SF story about the unchosen ones.
2) Dad wants you to develop the discipline of waking up at 8 every morning and cheerfully greeting your company president
3) [multi billion dollar corp] has 5,000 directors, one just retired, and Dad plays golf with their boss
4) An acquaintance from high school/college bacchanalia with richer, cooler parents that just gave him his trust fund without requiring 1) and 2) is starting his seed fund because he doesn't want to wake up at 8 and play golf with old people, and you were fun enough at parties to make the cut. Plus you know directors at [multi billion dollar corp]!
Maybe if the "favored class" Americans took the bus or went to the laundromat like I did for years they'd want poor people to do well too.
But, all this thinking is in my experience pretty useless in terms of real world results (and I don't mean results like Stanford idolizing you). You're not going to "think" your way into curing cancer no matter how many hours of biology or chemistry you take, and I should know, because I've seen people try. It's pretty hard to "think" up a company the size of Amazon, too, especially in a world where a lot of industry have their Amazon. You need capital and a degree of self-confidence bordering on manic delusion and when you have this you still need to not do what Elizabeth Holmes did and know when you've failed and give up what may have been ten or twenty years or a lifetime and start something else.
It's not the 100k hours. It's the very large odds they will have been for nothing, and picking up whatever is left of your life after.
If it's actually impairing your life (as in, you put in 12 hours days because there is no way your brain will allow you to complete your work in 8), you need to consider changes in work environment may be needed to keep you on task.
Several of my friends had success with lists and time tracking (it helps be aware that, whoops, you're working on bug #Y now). Pair programming tends to keep people very focused and it will never go on for 12 hours, so you could pair part of the day, get the core work done, and then feel guilt-free about the self-learning.
Take physical breaks, start drinking coffee, or both. Sometimes lack of focus is a natural consequence of your task being not nearly exciting enough. We all have tasks to do that are terribly boring, so when stuck in one, occasionally give your brain a nugget of stuff feeling new. But don't task switch without physically changing your environment; going outside when you need to goof off will let you internalize that at desk=boring stuff we get paid for and outside=play time. (Like many other smart children you and I probably didn't learn that lesson quite as well as we should have in school.)
I get the opposite kind of symptom where my principal problem is I can't stop at one cup! have stabilized around 5-6 which is OK for my tolerance level... back when I drank a single cup daily between 7 and 8 am if you'd told me "15 years from now you're going to have frequent anxiety that you could stop if only you could keep yourself from the (free, delicious) coffee at work" I may have reconsidered though.
I resumed drinking tea, then coffee, then a lot of coffee, but I've got to say I'm a lot more mindful now, I don't just hang out in front of the computer making pot after pot and such, and I try to get food instead of coffee if I'm out and want something fun to taste.
1. Usually people who use stimulants for productivity don't have cognitive problems they have motivation problems. The gold standard for this is make lists. Lists should be short and made up of achievable items. New list every day. Throw out the previous day's list once you've finished writing today's. If you're in school study/practice with other people it is a huge improvement. Try to use timeboxes for things (in the morning I will study for 1 hour, etc), it's not sexy, but it works. If you have trouble maintaining your attention for a full hour without caffeine, use shorter tasks and take more time upfront breaking them up.
2. Exercise in the mornings. Don't skip breakfast.
3. don't quit it on a Monday, take painkillers. There are NSAID with caffeine formulations that you could probably taper on (they usually don't have as much caffeine per pill as you'd get from your usual Starbucks).
4. I actually kinda like chocolate for the mood boost part. Almost as good as coffee, tastier, even exists in hot beverage form.
I do drink chicory or decaf if I've already had 5-6 cups of real coffee and it's pretty good and provides the same "I just took a break" feeling, however, I could never fully replace coffee with it (if anything, it made me want real coffee more). I would recommend if you'd like to decrease consumption vs just stopping, it does help to trick your brain at first.
On another very cultural point, I know of exactly zero women with my education level who would have been willing to give birth before 20, even if they had been out of college by then -- they got to that education level by being ambitious and for ambitious women career takes precedence over babies. (There were also practical issues. If you start college at 15 there are very little safe ways for you to experiment with sex before college. All women I know want to have sex recreationally for like, several years before having a baby, and with different men than the eventual baby daddy too.) I grant that it's in a city -- I think the whole career/baby conundrum is a lot less of a problem in rural or religious areas. Still.
I'm a mid-level C++ engineer -- if anything I can tell you where your current experience is compared to our requirements for junior jobs, if your resume is fine information-wise and what kind of thing may be tripping up interviewers. I've interviewed juniors and I've never told them they needed a ton of experience -- and most of our juniors have science or engineering PhDs but zero industry experience.
Assuming you do have, like, school projects, and your PhD project includes programming. Otherwise you do need projects. For C++ a good way to have projects is to talk to PhD students in other fields (physics and bio are good) and ask if they need help with their computation and modeling. Listen to them a lot as they often already use software for most important things but may have need of e.g. quickly indexing text files or targeted data visualizations. In industry, we like hearing about collaborative projects.
You can apply to R&D roles (search for R&D engineer, research software engineer, R&D software specialist and similar titles) which are essentially software engineering roles that require grad school.
A good idea may also be to pick a subfield that traditionally hires more educated people (science or engineering or chemistry software hires from that pool because the clients tend to be in academia).
In a given city most of the PhD-friendly industry jobs are staffed by people who still regularly see your professors at happy hour. Have you talked to your professors and alumni of your program if they know anybody's who's in industry now? Look up on LinkedIn where the people from your lab ended up. You can probably get some of these people to give you an interview that's not biased against your specific experience.
I haven't and will never be what people tend to call a purely maintenance programmer, but the parts of my job that interact with existing systems are more challenging, more important, and teach me more (from looking at the patterns in existing code) than the greenfield parts.
Where the misconceptions come from is it's easier to be "good enough" when you do maintenance, so a lot of people don't try to understand the existing context, don't interact with non-technical people, and don't stretch themselves to understand the business, because they mistakenly think their job is writing code.
In truth the polarizing of the Internet is causing a lot of us to be lurkers who may have things to say but do not want to engage in emotional content with strangers, because everything is interpreted so emotionally these days.
Honestly those things are different person to person. A lot of people are better motivated by cash prizes, whether or not they're public and known in advance. For some people motivation is feeling like they have the ability to do something, so they're more motivated by being sent to trainings or given more authority or a junior person to train. And some people are like me, and just want to hear thank you.
Anyway, managers don't have the right sense of that stuff. If you feel you must reward your employees into doing more stuff for you, then go all the way and implement operant conditioning. If you want your employees to have a well-deserved vacation at the end of a big project that made you $5M and them $0, make it for everyone. And if you just want people to feel recognized, leave them enough time at work or outside it to form real-life relationships with individual humans who will. You can't scale gratitude.
There are some problems with using nucleic acids, chief among which is that the central dogma of molecular biology isn't nearly as true (or as central) as we used to think. Don't know as much about RNA -- there certainly are RNA "machines" where the nucleic acid itself has a function and maybe those could be coded for specific functionality. RNA isn't as stable though (because it's single stranded and RNAses are everywhere) so it sounds hard to deal with experimentally, but I'm no expert.
That said, you (and several of the other posters) are being awfully dismissive of the notion that there are people who work in your language but don't feel confident with it. I may have major imposter syndrome or something but I've (before this weekend) thought if I didn't get a talk at first it meant I was too stupid for all talks. I don't have mentors at my company because most senior developers have other subjects of expertise than C++, which is just a tool to us. My city has several Javascript meetups but nothing on C++. And I think the way I've been treated when saying, essentially, relative to the C++ community, "I use C++ every single day but I don't think I'm one of them", which is being told, "you're not good enough/disciplined enough/confident enough to be one of us", shows that.
Most of programming is slowly waking up to the idea that being exclusive and giving people tough love instead of guidance is starving companies out of potentially good developers. I know my coworkers and most of them would give up on a learning resource that they felt was too advanced and would be turned off from any effort if all everyone was telling then was "try harder". (Even though in this case trying harder is 100% the solution.)
In most other fields, including medicine, there are high-EQ people hired to fix exactly that, by bridging the gap between where the practitioners currently are, and where the industry wants them to be, usually in a way that's either very high touch or very structured. And in those other fields, if most practitioners aren't reached by the information, or are consistently misapplying it, the industry guilds put the blame on the way their information is being transmitted, not on the practitioners.
Then I know what I'm doing tonight. I like the computational geometry aspect much better than the programming language part. The thing with C++ is very often the stuff you don't know sneaks up on you at the worst time when starting on a new library, or trying to reuse code more complex than you're used to. It's strange to think of it as something to study, but 5h/week is something I could do instead of more overtime.
>What I don't particularly like is people complaining about things they don't seem to have made much effort to understand.
The main thing I was complaining about was C++ takes (relatively to e.g. Python) a ton of work to understand accurately, but also to explain properly to other people. You must know that from answering on StackOverflow too. (There are features of C++ I don't use because I/my coworkers don't yet know them, and studying will help me with that, but I can't complain about them yet!) StackOverflow is actually great for C++ though, so thank you for answering on it. Usually there's always an answer with a detailed explanation even for strange code samples. Often it's through reading the other people's questions that I can understand how a construct can be useful in practice.
Anyway, originally in my OP, I read the blog post and at the end, he was saying to people that have any industry-specific concern with the way they use C++, and the way C++ is changing, to get involved. I was just saying, as a C++ end-user, even one who cares enough to write this, there is no readily accessible way to do that, because I don't work with anyone who's already on the committee nor at Microsoft. So it feels a bit like an empty rebuttal on his side. Writing this here, it's basically the longest discussion I've ever had my whole career with people who really know deep things about C++ and the process it's made by. I'm glad for it but I'm clearly not the demographic the original blogger was addressing! Even though I definitely feel those same issues he outlines.
Again, I think concurrency is one of the parts the standard library does best. (And I think part of the specifics of this is it has primitives like async and future that are higher level and are much easier to explain. I happen to write lock free data structures often enough that finding blog posts at a good level to explain the API for atomic to my code reviewers is a need/bother for me, but there are also plenty of concurrency use cases where I don't need atomics, and I also read that there was a plan to allow parallel execution for most of the algorithms in the standard lib, I don't know if that's in MSVC yet but that's an example of things I like).
I don't blame the standards committee for implementors. In general, it must be terribly difficult to be on the standards committee, and have to deal with stuff implementors have already done, stuff they won't do, and stuff they are telling you they are doing but will not do right in the end. OTOH, as a end user, you have to understand that I have to deal with implementors, and they affect how I think of a given C++ feature, some of which look awesome in the text but are impractical because of implementor differences. I'm not alone: every C++ dev I know has a subset of C++ features they have deemed "practical", based on things like implementation performance, compiler error messages, how many characters the function names have, etc., and part of the problem is it's not the same subset for all C++ devs. Sometimes I wonder if there shouldn't be a subset of the standard (and I don't mean the C subset!) that's earmarked as beginner-safe and compilers could enforce the, well, beginner-safeness of code that is meant to be foolproof... but I suppose your angle is code meant to be foolproof should either never allow a beginner within 50 feet of it or be written in Java (or Rust?). Which, I get.
I would like to clear up a misunderstanding that I think you had: I do not spend zero time learning about C++. I'm not super confident and I think by HN standards I am not very experienced in C++ (or anything else), I'm definitely not at the level where people at CppCon would want me in the room, but people at my workplace do come to me for help with that stuff a bunch of the time. I tend to volunteer to explain newer or more complicated parts, etc. I'm a mid-level dev generally and C++ is my main language, and I'm not significantly more ignorant than my coworkers about it. If that is below the threshold at which you will consider someone worthy of talking about C++ on the Internet, maybe that's why C++ doesn't have that many beginner-friendly communities around.
Here are the C++ subjects of interest to me:
* geometric primitives. Not having basic geometry by now is insane.
* concurrency, I think the API as it is is good, but some of the APIs around atomics (mostly the difference between compare_exchange_weak and compare_exchange_strong) are not clear, I have had to explain those to coworkers before. Why can't we have something called test_and_set like on atomic_flag that's an OK default? Also, while I perfectly understand why that's the case, atomics have deleted copy constructors and that tends to generate compiler errors. I don't get why compilers can't just generate default constructors that don't copy the atomic like all my coworkers keep having to write and potentially introduce errors in
* filesystem API, very excited for that but sort of worried it will not work on every platform and especially that it'll work terrible on windows. I have to write Windows/Linux/iOS/Android C++ so a bunch of my gripes are "the standard is inconsistently supported" and I supposed that's not the job of the standards committee to enforce... but maybe they could stop inventing new stuff for Microsoft to screw up...
* few other misc things. The fact X const& and const X& are both valid leads to every project having its own "standard" of const placement and it's not great to read, etc. not major stuff. But things that are of concerns to working programmers.
I'm not really complaining, I love C++ and being a C++ programmer and you couldn't pay me enough to go integrate idiosyncratic web frameworks. However I think you must admit that the C++ community, beyond the language itself, is a little exclusive and not super friendly to people who are not as knowledgeable as others. I have a little time to learn some of this stuff, and I would be happy to, but I will never be an expert like most of the standard committee is. Based on your message I think that makes me and my opinion not welcome? If so that's OK, but, um, there's a lot more of me than there are of them in this industry.
(edited for formatting)
Most often I learn code by reading code. OpenSceneGraph is an example of an open source project that has modern ish C++ but no deliberately abstract misdirection. Open source usually does not have super clean code but it's a good way to sample the variety of structures you can find in a project. Of course the classics (sqlite and the Linux kernel) are much too C-like for where I'm getting at but they are still full of lessons for how to organize modules and APIs, how many arguments to pass and where, where to park I/O code, that sort of thing.
I posted it here for the benefit of HN readers who may have the same question but I'll write you an email too so you can share what you want to improve and such. There aren't many C++ programmers left in the HN-reading, not just punching a clock demographic, and I kind of miss talking to people who get that. Like the prototypical game dev in the article I go to one conference a year, and it's not about C++.
[1]: https://yosefk.com/blog/ [2]: https://blogs.msdn.microsoft.com/oldnewthing/