Enduring Mental Health: Prevalence and Prediction - <AUTHOR> https://www.ncbi.nlm.nih.gov/pmc/articles/PMC5304549/ <comment><AUTHOR> Abstract:

> We review epidemiological evidence indicating that most people will develop > a diagnosable mental disorder, suggesting that only a minority experience > enduring mental health. This minority has received little empirical study, > leaving the prevalence and predictors of enduring mental health unknown. We > turn to the population-representative Dunedin cohort, followed from birth to > midlife, to compare people never-diagnosed with mental disorder (N = 171; > 17% prevalence) to those diagnosed at 1–2 study waves, the cohort mode (N = > 409). Surprisingly, compared to this modal group, never-diagnosed Study > members were not born into unusually well-to-do families, nor did their > enduring mental health follow markedly sound physical health, or unusually > high intelligence. Instead, they tended to have an advantageous > temperament/personality style, and negligible family history of mental > disorder. As adults, they report superior educational and occupational > attainment, greater life satisfaction, and higher-quality relationships. Our > findings draw attention to "enduring mental health" as a revealing > psychological phenotype and suggest it deserves further study.

<comment><USER2> > Instead, they tended to have an advantageous temperament/personality style, > and negligible family history of mental disorder. As adults, they report > superior educational and occupational attainment, greater life satisfaction, > and higher-quality relationships.

———-

I assume they adjusted for this, but this is funny at a surface level reading. People with superior educational attainment, greater life satisfaction, and higher quality relationships have fewer mental health issues. Who would've thought?!

Another take: we have medicalized the normal human range of human emotions to the point that 83% of the population will at some point be considered to have a mental disorder.

<comment><USER3> I think that they argue that the causality works the other way around.

All men are mortal doesn't mean all mortals are men.

</comment></comment></comment><comment><USER4> Summary:

Study was done with a largely Caucasian, New Zealand cohort born in the 1970s.

Factors which correlate with enduring mental health:

Childhood factors:

\- little evidence of strong negative emotions

\- social support and sociability

\- self-control

Familiy environment factors:

\- fewer first- and second-degree relatives with mental health issues

\- less negative discipline

\- reduced likelihood of parental loss

Not relevant:

\- socioeconomic advantage

\- perinatal complications

\- physical health

\- intelligence

</comment><comment><USER5> I know that in my close group of friends more than half have opened up about dealing with depression but that it might be that way for the general population is counter-intuitive to me. It makes sense when you think about it, though: Obviously the couple walking down the street are going to seem happy, and all the acquaintances you see once a month won't be the ones opening up to you.

</comment><comment><USER3> It feels anecdotally correct. Consider things like depression as a result of bereavement or child birth (for women). Insomnia , anxiety , etc. So many ways to be "mentally ill" temporarily.

That said it does seem that the extreme prevalence of something over a long period of time makes dubious the claim that it is a "mental illness".

It feels like treating people as defective for falling over because they don't have 3 legs ...

<comment><USER6> It might not even be indication of over diagnosis. Everyone gets physically ill sometimes

<comment><USER3> that's a good point if the two are comparable.

</comment></comment></comment><comment><USER7> The entire field o mental health revolves around the idea that there is some sort of 'this is how brains are meant to work'. In extreme cases that works well (eg, lead poisoning), in edge cases there is a lot of grey.

One uncomfortable part of mild depression is the questions around how correct it is. It is easy to logically deduce depression as a rational response to the world.

<comment><USER8> The field of mental health says something is a disorder if it causes a noticeable and real problem. It's a beautifully simple idea: "Is it causing a problem? If yes, let's help. If no, leave well enough alone."

Quoting Wikipedia's summary (can't find my DSM-IV):

>According to DSM-IV, a mental disorder is a psychological syndrome or pattern which is associated with distress (e.g. via a painful symptom), disability (impairment in one or more important areas of functioning), increased risk of death, or causes a significant loss of autonomy; however it excludes normal responses such as grief from loss of a loved one, and also excludes deviant behavior for political, religious, or societal reasons not arising from a dysfunction in the individual.

[https://en.wikipedia.org/wiki/Mental_disorder](https://en.wikipedia.org/wiki/Mental_disorder)

We can argue about where to draw the line for distress or disability, but I just wanted to counter the myth that shrinks are totally subjective.

</comment></comment><comment><USER9> Comments here are predictably (and depressingly) misstating this research as "medicalizing normal emotions." This is due to two widespread misconceptions:

1) A refusal to distinguish between mental illness and permanent psychological disability (along with the idea that all mental illnesses are neurostructural in nature)

2) A refusal to acknowledge that "biologically normal" human emotions can nevertheless be a cause for medical concern, in the sense that a high fever is a "normal" and necessary response to infection that can nevertheless cause serious problems.

If someone is deeply depressed after their mother dies, they should be considered as having a mental injury that should heal on its own but needs to be monitored for "infection" or otherwise problematic healing. Saying ahead of time "this person isn't mentally ill so this is just normal bereavement" is bad medicine and bad science.

US society in particular (but also humans in general) really wants to draw a distinction between "the mentally ill" and "the mentally well." If you were to try to draw a similarly strong distinction between "people with stomach problems" and "people without stomach problems" the absurdity would be self- evident: there is no reason to lump people with norovirus in with people with IBD. But because mental illness is so much more mysterious (and, frankly, scary), and so entwined with social and societal expectations and norms, it is much harder to approach it from the same medical-first perspective.

<comment><USER10> > (along with the idea that all mental illnesses are neurostructural in > nature)

I agree with everything you said except I'm having trouble with this bit. Neurostructural as opposed to what? All thoughts are physical things happening in the head.

The brain changes. Sometimes it changes to a state that creates problems for a person (perhaps long term depression spurred by grieving a loved one.) Sometimes talk or time can change it back. Or change it to another state that isn't impaired by ticks or grief or anger. But it is a physical process.

I understand that sometimes working at the granular level of neurons or chemistry isn't as productive as working at the psychological level. i.e. sometimes talking about emotions can get the brain to start to encourage different pathways that will eventually become the norm and take one away from the problematic ones. But this is still a neurostructural change in the brain. It is just mediated by the brain itself.

Perhaps I am missing some subtle point or misinterpreting you?

<comment><USER9> No, I was being vague and you are basically correct: I really meant "occurring due to a static abberation in the brain present since birth / puberty / adulthood", like schizophrenia, bipolar disorder, many forms of depression, versus something that can be induced by circumstances or upbringing. Making it more vague is, for instance, that PTSD is obviously "induced by circumstances" but is also thought to be due to a brain injury caused by emotional trauma.

Scientifically there isn't a boundary, and I am speaking very loosely here and probably should have said something more specific.

But "all thoughts are physical things happening in the head" is perhaps too reductive, similar to saying "all physics is quantum mechanics" \- just because it's true doesn't mean it's a useful way to think about a specific problem. There's a distinct medical difference between someone with chronic depression without a specific life event ("neurostructural"), and someone who started out being "legitimately" depressed after being laid off, but spiralled downwards. Both can be described as a "deficit in the structure of the brain" but in the former case that structural deficit likely cannot be fixed by the brain itself (even with the guidance of a therapist) and drugs are probably necessary. In the latter case, perhaps only CBT and general wellness habits are enough - the brain can fix its own "structural problem."

<comment><USER10> Thanks for the thoughtful reply. I grew up with a parent with severe mental illness and a person now in my immediate family has a similar condition. So while I've never formally studied psychiatry, psychology and neurology, I've been submerged in the lingo, treatments, concepts and philosophies for most of my life.

I lean heavily on the mechanisms of thought and mind because even now there is a tremendous amount of stigma and mysticism surrounding mental illness. I've encountered even mental health providers who still speak or act as if patients have a failure of character or personal weakness. I've encountered specialists who aren't really even familiar with CBT or who still think digging up trauma repeatedly a la Freud is useful. I encounter a kind of dualism all the time, as if the mind is some kind of sick spirit inhabiting the brain.

I agree though. Treatments can function at a more macro level. I think this is demonstrated by something as simple as venting about a problem or person. A resentment or regret that is stopping one up finally falls to the side when one talks to a friend about it.

These high level concepts we have about objects and people and concepts clearly have some power to drive the lower level. Attempting to resolve some issue a person might have with their spouse at the neuronal level would be a bit like building a house up from atoms rather than timber.

</comment></comment></comment></comment><comment><USER11> Wow could there be better evidence of medicalizing "normal" than this article</comment>


The Next Billion Dollar Disruption, Real Time Animation - <AUTHOR> https://www.inc.com/geoffrey-james/the-next-billion-dollar-disruption-you-read-about-it-here-first.html <comment><USER2> I ran a vfx company before. Author clearly is just a hobbyist at best and has no experience in digital production.

Studios aren't clueless, this is their business. They take advantage of every hardware upgrade, have already expanded into the cloud, and the bigger companies have direct R&D access to nvidia's engineers to develop the next generation. Everyone wants faster graphics and lower costs, and they already use real-time rendering everywhere, especially in editing.

Yes, better hardware has made it easier for more people to produce more things, as evidenced by the exploding world of Youtube creators making high- end productions. However there is an immense difference in overall quality between those videos (which can easily climb into 6 figure costs) and the big budget studio productions that fill cinemas.

Also graphics are a tiny part of the overall product. The rest is the creative process, building the actual scenes, and making it all look and feel right. There's no magic button to transfer your imagination into the computer, and that's the majority of the effort, along with actually coming up with a good story in the first place.

<comment><USER3> Yea the author insinuated that stock 3D libraries were also an advantage. Anyone who's worked in animation or video games knows you can't generally just grab a bunch of assets from a store and put them in a work and expect them to look like they belong to the same world. You're gunna have to do some shading work at the minimum.

Unless you happen to make movies that share very similar styles, such as Pixar, which already has a massive digital library of assets they pull off the rack whenever they want.

Another thing to look at is "Smash and Grab", which is the original talk about an internal Pixar project to give a small team a really small budget and timeline, no bureaucracy, but access to Pixar tech, and make a quality short film, and it's doing pretty well.

<comment><USER4> I will make a few speculations:

1) ML algorithms will be able to adjust stock art to have a common look. Think MM fonts on steroids.

2) Common themes will develop in stock art libraries. In other words, I'll be able to pick a world, have a wide array of objects, and it will all fit together pretty well.

Will this be as good as a Hollywood-budget animation? Almost certainly not. Will this be good enough, given good plot and writing? I suspect so.

Will we see fifty different movies with the same-looking characters playing different roles? Almost certainly. It will be almost like having the same actor play Tarzan AND the Terminator AND a police officer.

Will we see animation well behind the state-of-the-art? Almost certainly. On the other hand, I'm perfectly okay watching cartoons from 50 years ago, and I think we can do much, much better.

I think the major problem right now is that to do a movie, you had to be competent at plot/writing, animation, distribution, voice acting, etc. That took a movie studio.

Digital platforms are already taking over distribution. Now, a group of five friends can make a high-impact video. As other parts of the channel get subsumed by advances in technology, eventually it will be down to one person in a room with a good idea. That will be transformative.

</comment></comment></comment><comment><USER3> So like, studios and FX shops like Pixar and ILM are very much aware of these techniques, because they are leaders in them (they closely partner with Nvidia on things like the super impressive real-time raytracing of the RTX GPUs, for example), and they develop prototypes and working production applications of these things. The technology to replicate cinema-quality graphics at lower cost has existed for a while, at pretty much consumer-level costs in-fact (if you know what you are doing). But if you have $100m to spend, you're gunna spend it to keep ahead of what is already possible.

But I think my take after reading this is what he sees as a bomb that's waiting to go off is in reality a gradual evolution that literally everyone in animation/film sees coming. I have spoken to a bunch of people in the space, and have been in the space myself, and have run into absolutely no one that is a non-believer (like the people who doubted the iPhone would take off, for example).

Also let's be real here, we are talking about entertainment art here, and from what I've seen, most people suck at telling stories. Cost hasn't really been a barrier for a long time with low-cost, damn good cameras and free distribution platforms like Youtube. Hell, the pilot used to pitch It's Always Sunny in Philidelphia was famously recorded on a home camcorder. People don't go from distributing their own stuff to pitching studios for technology resources they don't have access to, they do it for the marketing machines and higher-revenue distribution channels. The up-level in quality is just a bonus if you have a good story.

</comment><comment><USER5> Yeah I don't think this author has any idea what he's talking about. His argument basically is that real-time animation and motion capture will, what, replace what Disney and Pixar are doing?

What people like this don't realize is the degree to which every iota of detail in a Disney (Pixar, Dreamworks, Sony, etc) production is art directed and stylized. Every shot is cheated to camera (meaning the poses don't necessarily read well in 3D, but look spectacular/have clear posing to the locked camera), at least to some degree. That's why these movies are so fun to watch. Even something like Rick and Morty has stylized animation and it's own particular motion language. To think you could replicate this with generic asset libraries and motion capture is beyond ignorant.

It's particularly frustrating as somebody who once was a professional animator to hear this guy talking about how this technology will revolutionize the field, casually mention that he was "considering becoming a professional animator" - and then you look at his work and he has such limited knowledge of the craft. It belittles those who have devoted their lives into mastering this deep skill.

<comment><USER6> This is what professional typesetters (etc.) said when these ridiculous DTP machines came around.

One of the hallmarks of a _disruptive_ technology is that it's _crap_ compared to what the entrenched technology does. Not just seems like crap, but really significantly worse by any objective standard.

So you are 100% correct in your assessment, and at the same time very possibly missing the point.

</comment></comment><comment><USER7> This isn't disruptive, it's evolutionary at best. Red vs Blue was a successful web series 15? years ago, made entirely from screen recordings from Halo 1. Look up "Machinema". As others have pointed out, lack of truly great artists/inspiration seems like the biggest barrier to producing entertainment. Look at season 1 of South Park - good content beats flashy trimmings every day of the week.

If you've never seen Red Vs Blue before, check out this scene:

[https://youtu.be/9BAM9fgV-ts](https://youtu.be/9BAM9fgV-ts)

<comment><USER8> They used Halo only in the very beginning, they switched to more traditional tools: [https://www.smithmicro.com/company/news-room/press- releases/...](https://www.smithmicro.com/company/news-room/press- releases/2013/07/03/smith-micros-poser-software-empowers-rooster-teeth- productions-upcoming-rwby-web-series)

</comment></comment><comment><USER9> The examples the author uses and states that they are "almost real" are in no way almost real. To compare his short film to Disney price and art is a joke. They're nothing a like. One of Disney's Moana stills was something like 15GB+. Try do that in real time.

<comment><USER3> The Nvidia RTX Quadro cards recently released can actually handle that size a scene with ray-tracing in real-time, just fyi, and Disney/Pixar is using them now.

</comment></comment><comment><USER10> The author probably does not realize that Moore's Law has really slowed down and the geometric increase in 3D rendering power is unlikely to continue as fast as in the past. Not to mention that you need ever more graphics processing power to make smaller and smaller improvements in realism. I therefore suspect it will take longer than anticipated to get to the cinematic quality that he hopes for at the price needed for the transformation he anticipates.

<comment><USER3> So for CPUs yes, for GPUs we have seen massive progress even just this year. The Nvidia RTX cards have actual real-time raytracing, not some demo, an actual working product, that can handle massive scenes. I saw a Pixar Renderman talk where they used an Nvidia RTX Quadro to real-time raytrace the entire city in Coco.

Less about raw power, more about specialization. There is a lot of room still in specialization. In graphics, with things like ray-tracing, and in AI with things like the TPUs.

<comment><USER11> Moore's law is about transistor density, not clock rate, floating point operations or anything else.

CPUs have risen in transistor count too, they just use the transistors to speed up serial general purpose computations as much as possible.

Moore's law is not about benchmarks.

</comment></comment></comment><comment><USER12> I would say the fallacy is the author's assertion that studios don't know about realtime techniques, or that they aren't already applying motion capture and GPU renderers internally.

</comment><comment><USER13> I remember watching the great documentary "Good Copy Bad Copy." The most memorable fact from that movie is that Nigeria is the third largest film industry in the world. And, the film added that they are making films much more relevant to people from the African disaspora than Hollywood ever will, as Black Panther proves (it's the exception to the rule and took this long because Hollywood couldn't move any faster). I'm not doubtful that Hollywood isn't aware of this shift and will use the technologies, but the author's point that there is a lot of overhead which will need to be jettisoned to compete in the future is not something to ignore.

</comment><comment><USER14> Today you can get 3D motion in pretty much real time just from your iPhone videos [https://getrad.co](https://getrad.co) (not affiliated with them, just like the app)

</comment><comment><USER15> _Already, real-time animation devices allow cartoon characters to "live." Systems such as Vactor and Alive propel toons onto talk shows and into interactive installations at theme parks._

That was from 1995. [https://www.wired.com/1995/12/new- hollywood/](https://www.wired.com/1995/12/new-hollywood/)

</comment><comment><USER16> The article inspired me to a couple of hours of research of the field. I feel it helps to see whats currently possible on a relatively low budget. This demo I came across uses an x sens bodysuit for capture (around $7000, plus yearly sub - prices aren't public) , and an iphone x for facial capture in realtime using ARKit programming.

To my amateur eyes, it looks superb, and better than many demos in terms of the sync/accuracy of the facial expression and speech.

[https://www.youtube.com/watch?v=i51CizUXd7A](https://www.youtube.com/watch?v=i51CizUXd7A)

It's also quite charming and amusing. Here's a background article, explaining the approach.

[https://uploadvr.com/iphone-xsens-performance-capture- bebylo...](https://uploadvr.com/iphone-xsens-performance-capture-bebylon/)

<comment><USER3> That demo was really cool (had the pleasure of seeing it live), and the Kite & Lightning guys are really great at these kinds of hacks. Keep in mind while this setup suits their needs for video-game class animation, the iPhone only supports like 56 blend-shapes (facial expressions), which wouldn't cut it for film.

</comment></comment><comment><USER17> On a somewhat similar theme, but far more in depth and exploratory, is the video 'Goodbye Uncanny Valley' by Alan Warburton - [https://vimeo.com/237568588](https://vimeo.com/237568588)

</comment><comment><USER18> A bit weak article for HN frontpage, but it's good enough to start the discussion.

Yes, the cost of producing quality content will drop drastically. Yes, local improv groups will start making epic space operas and detailed historical reenactments.

One thing didn't get mentioned - interactivity. If you're creating content in real time, you can customize it to specific audience. You can respond to audience questions, give more screen time to favoured character and even alter the plot based on voting. What about crowd-sourced animated content?

The technology is already good enough (check Adobe Character Animator), but we sill need a good digital theatre software.

</comment><comment><USER19> Neil Blomkamp of District 9/Elysium fame has released some shorts made with the Unity engine and was pretty effusive about the benefits of using a real time engine for animation: [https://unity.com/madewith/adam](https://unity.com/madewith/adam)

That said, the results are still quite far from studio CG animation. I wonder whether the market for cheaply produced animation is really as large as the author thinks. I think he's underestimating the primary value add of studios, which is marketing and distribution.

</comment><comment><USER20> Off Topic Questions for All those working in FX and Studios etc

Are you all in on Nvidia? Are there any shops using AMD? Every Game / FX needs to mention they partner with Nvidia and I have yet to read much professional uses on Radeon. I understand for Data Science and Machine learning it is all CUDA, and likely won't change any time soon. But even for Graphics AMD doesn't seems to be doing well in professional space.

<comment><USER2> Both companies are used, but nvidia just has better support and better drivers. GPUs are mostly used in workstations for real-time renders, lighting previews, and physics simulations. That stuff works well with CUDA and its programmability.

Render farms are different, and still CPU driven because of software and memory. AMD cpus will probably get more use in render farms for the price/performance, but then GPUs are also getting better at stretching memory and running other software, which might eventually switch rendering pipelines to be GPU driven.

</comment></comment><comment><USER21> Now, from the people who hyped 3D TV and VR headsets, the Next Big Thing.

This is a useful technology for creators, but probably not mass market.

</comment><comment><USER22> Too bad that everything centered around NVIDIA in that industry. It is one of the worst companies for the open source. Not only staying aside of open source, but actively resisting any attempts of supporting their hardware in open drivers.

</comment><comment><USER23> The mocap example he showed was very uncanny valley for me. The disruption he envisions may be further away than he thinks due to how uncanny valley works. The closer you get to human the more revulsion you create.

</comment><comment><USER24> The author is right, but not in the ways he thinks he is.

The change will be larger and even more unexpected to the people who are currently expecting it. It will be larger than even I can imagine.

Everyone in this thread can't see the forest for the trees. Tell me a story ...

<comment><USER2> Ok... care to share any actual details?

<comment><USER25> I actually agree with this comment. It's as simple as saying that the medium of the internet is still a teenager, and what can be done with it as a _filmmaking_ tool, per se, is largely untapped.</comment></comment></comment>


Ask YC: What do I, a graduating CS student, need to know to go into the real world as a programmer? - <AUTHOR> What do I, a new graduate, need to make sure I know to land a decent job in the 'real world' as a programmer?  I am graduating in less than 2 months with a Bachelor of Science in Applied Computer Science (BSACS) and feel clueless about what is approaching rapidly - a.k.a THE REAL WORLD.  I know this question has been asked and answered countless times (most of which I feel that I have read), but as is the case with all in the tech world, often this information becomes dated rapidly, is one sided or extremely biased.  So again, what concepts, technologies, languages and various disciplines do I need to KNOW in order to be proficient, or at least to be good enough to land a job, as a professional programmer?
I find myself feeling as if I know all this 'programming stuff' but have no real clue of how to sit down and work in a development environment with other developers on a real project.  Not only this, but I feel that I know a little about a lot - i.e. I am a jack of all trades, but a master of none. Clearly I have done problem solving and system design in my classes, but these projects are limited to core concepts based heavily on CS theory and are often very limited in size and complexity.  I have been exposed to C++ (4 classes), Java (2 classes), VB.Net (1 Class), SQL (1 class), Discrete Mathematics (1 class), Project design and management (1 class), Advanced Algorithms and Design (1 class) as well as a sprinkling of various other 'CS-related' classes via my education.  On the side I have played and dabbled with Ruby, Python, PHP, C, C# and a handful of other technologies that escape me now.  I have a 3.6 GPA and have not made less than an A in my core CS classes since the beginning, but again, I still feel clueless.
Any tips, suggestions or criticisms are warmly welcomed (well, except criticism, which will be welcomed, just without the warm feelings attached).  Please, where time and willingness permits, be specific - do I need to know how to design/write a compiler?  do I need to know assembly (taking that class this term anyways)?  If I want to make money first and worry about fun later, should I focus on corporate adopted technologies (Java, anything Microsoft, etc.)?
Thanks in advance!
-Matt <comment><USER3> It seems to me that for most corporate entry-level programming jobs, the knowledge of computer science required is really minimal. You _probably_ won't be building any compilers or using assembly language.

There are exceptions, of course. Microsoft is infamous for being demanding of their new hires. You'll likely find that the more a company's core business is software, the more computer science skill they will demand of you. But there are lots and lots of companies hiring programmers who have core businesses other than software.

Which languages to be proficient in varies depending on the sort of work you are doing. Browse current job openings; for the ones you find interesting, look at what languages they are using, and then focus on those.

Contributing to some open-source software project is a good way to develop some practical skills. Two months of part-time effort isn't a lot, but perhaps better than nothing. If not that, then you yourself should learn how to use some sort of version management tool, like Subversion. Go through a tutorial, start storing your homework projects in it, etc. You won't get to see all of the ins and outs of version management using it alone, but it'll be a start.

<comment><AUTHOR> Thanks for the feedback tjr; especially so in regards to the 'version management' suggestion. I have felt that this is likely someplace I need additional knowledge and experience. I have accessed Subversion repositories, but in truth, have never maintained my own nor would I know what to do in a instance where it was actually required.

Learning version management is on the list to learn now :)

Thanks again, -Matt

<comment><USER4> You might want to play with Git instead. SVN is very, very easy to set up and use:

svnadmin create ~/svn-repo

svn import myproject file:///home/you/svn-repo/myproject

svn co file:///home/you/myproject myproject-workingcopy

 _Work in the working copy as you would on any SVN project._

I spawn new branches whenever I start a new project. I've also tunneled it over SSH, HTTPS, blah blah blah, but it's boring now. Git is probably the future for big projects IMHO. (Although GOOG gets by with Perforce, which is basically SVN with some extra hooks)

Version management is a thought habit. Would you walk a tightrope without a net? Why write challenging code without one, then? Similar to automated regression testing, it's just another habit that offloads responsibilities onto the computer so that you can work on more interesting things.

If you haven't built at least a trivial application in *nix, even just something like a server for Dopewars, give it a shot. Obviously it's rare that you'd need to do it for a job, since most of the interesting protocols have good implementations, but you'll have more insight into when the standard implementation is actually a really bad idea... that is to say, rather more often than you'd think! It won't take more than an afternoon or two if you've done as well in all your CS classes as you say. (One thing you might like to do after that is go back and look at the twisting road the Subversion guys went down as they implemented their DeltaV protocol -- considering that these are old Apache developers, it's enlightening to see that they followed plenty of dead ends, too) For extra value, do it on an embedded system, with its totally different constraints. (If you have access to something like the Xilinx rig that we used for the CPU engineering class I took, so much the better -- FPGLAs can't help but become more popular as vertical markets are more automated)

There are so many opportunities out there for someone with a good grasp of both the theoretical and practical aspects... if you really like building things, you ought not to have any problem finding a job to suit you with your degree.

<comment><AUTHOR> Thanks apathy, I checked out Git a little while back. I definitely think that I need to learn more about both Git and SVN. From what little contact I have had with companies, SVN seems to be the most widely deployed for those on *nix platforms - that likely has something to do with the ~5yr jump that SVN has (?) though...

Thanks for the encouragement!

-Matt

<comment><USER4> 5 years? If you count from when FSFS became the standard (2005?) it's really more like 3 years. I think Subversion will probably remain the standard for your 'average' developer, and Git will make huge inroads into the more elite/distributed teams, since it's the default repo for the Linux kernel. I don't really see the point of learning how to use tools that other developers are unlikely to use -- CVS, SVN (which is almost identical to Perforce), and git have compelling projects which use them. Most others don't.

If you use SVN in a group, you should also use Trac, btw. It's fucking amazing. _looks at Trac Hacks_ Holy mother of god, someone went and wrote a plugin to make Trac play nice with Git and Perforce (AMZN and GOOG use p4). Well, that's pretty sweet -- no effort required regardless of repo. And apparently they added a continuous integration dashboard, Bitten (<http://bitten.edgewall.org/wiki/Documentation/index.html>). I love those Edgewall guys. Makes me want to go back to workaday development... almost.

</comment></comment></comment></comment></comment><comment><USER5> I interviewed a bunch of Stanford CS students recently, and was amazed when I asked them about how much they had worked with databases. The answer I got back repeatedly was "I've used them in class." Not good enough.

One person, who had worked at Google, used a database there. "What kind of database was it?" I asked. "I don't know," was the answer, much to my horror.

Perhaps it's just me, but it seems like no matter which language you love most, or what you're doing, your data will need to be structured, and it will probably find its way into a database at some point in time. I don't care which database it is--just learn databases!

Then at least people like me can think about hiring you.

<comment><USER3> I wonder how much this has to do with how databases are taught to students.

While I started programming when I was 12, I didn't really do much with databases until I took a db class in college. Databases seemed boring to me, compared to nifty stuff like AI and Lisp.

The class only reinforced that notion. The textbook (and the class) focused mostly on some kinda funky little projects that didn't strike me as useful or fun to build. It wasn't until I started experimenting with web applications that I began to realize the power and intrigue of databases.

Databases truly are cool and powerful. But I don't think they look that way on the surface.

<comment><USER6> I agree with you. Databases seem boring. I've avoided database classes for exactly that reason, but there's no way to avoid databases themselves. Many applications have database requirements. I've started using ORMs a bit to avoid ugly SQL, but they don't actually simplify things much. They mostly just take care of some caching, transactions, and portability. You still need to understand what's happening below to use them effectively.

If you want to learn how to use databases, look into writing a program backed by SQLite. It's a great little database for desktop applications and it requires almost no setup to use, which is perfect for when you want to learn how to use a database but don't want to mess with actually getting one set up.

<comment><USER7> I agree that databases seem boring. I'd been using them for about 10 years before last year when I had to write significant parts of one. Once I started getting under the hood I realized how interesting a lot of the database problems are. Turns out, the geek factor is pretty high. Problems like query optimization, fast multi-dimensional indexing, full text search and so on give a nice playground for CS mojo. :-)

Per SQLite: It is probably the simplest SQL database to learn. However, I fear it might give a skewed perspective on SQL to someone just starting with it. While it's fine for the simplest of applications, if you start building up complex queries, its performance is orders of magnitude worse than almost every other SQL DB, potentially leading one to falsely believe that such things were to be avoided.

I personally find MySQL to be user-friendly enough for starting off with. Though, honestly SQL in general is one of those things that I'm glad to know, but find painfully inelegant.

<comment><USER6> I agree that SQL is painfully inelegant. It's one of those standards you wish had never been established. Like Windows, only worse.

As for starting with MySQL, it does reflect the actual SQL side better, but it's another thing to install and have startup whenever you boot your computer. For just playing around with SQL without committing to anything, SQLite's a nice option.

</comment></comment></comment></comment></comment><comment><USER8> 1\. Forget coding, study management. Managers get more money.

2\. NEVER put the word 'test' on a resume. Do not mention it in any interview. If they ask if you tested anything, say no. Lie, if you have to. Say the other guys on the project tested. The kind of people who want to be coders usually do not want to be testers. But if you're a tester once, they'll make you do it for years.

3\. As the twig is bent, so grows the tree. The title on your first job will stereotype you for your next, limit some opportunities and opening others. The first two combined will stereotype you even more strongly. And so on.

So be as demanding as you can get away with. Don't just accept what they tell you, unless you really have to.

4\. Go to grad school instead. You'll end up making more.

5\. A young programmer has to build a rep. One way is by making something famous and open-source. Another is to put "Google" or "Microsoft" on your resume as your first job. Or something like it.

6\. Figure out where you want to live. If your career is in finance, the headquarters is often in New York. Embedded systems work is on the West Coast, but all over, too.

7\. Defense contractors do a lot of software, mostly embedded. They've been known to write a compiler for an airplane. So drop your al-Queda membership and apply to Lockheed. But it's more bureaucratic and "Methodical" in that world.

8\. There are three places to be employed in software: a) A software company. b) A hardware company. c) Everyplace else. Software people are first-class citizens in a software company, second only to the hardware engineers in a hardware company, and somewhere below that in stock brokers, banks, and shoe factories.

By hardware company I would include Intel, Cisco, and Sun, for example.

Web companies might be a 4th category, but I don't know those companies as well. Instead of MBA's or electrical engineers (finance and hardware) you have graphic designers.

What I'm getting at is that if you will be working with other professionals in their kind of company, you will need to learn their needs and their business. In a software company it's a bit of the other way around. At least in terms of status: who is in charge.

8\. The right answers have to depend on you, otherwise the advice would be the same for everybody. And we'd all be trying for the same job.

9\. I'm not rich, so why believe me?

<comment><AUTHOR> As for #1, I don't really like power (specifically the responsibility over others that it brings) and money is secondary to enjoying what I do. This also relates to #6, which is the beach - so I am thinking I have messed up altogether, and should have studied beach-bumology instead of CS :)

I have considered, and am still considering #4. I like school and I like learning and so it seems like a fit... only problem is, school is freaking expensive, so we will see.

I am also considering #7, as I have some contacts in that world having supervised a small military contract refuel facility servicing Ft. Rucker Army Aviation Training Facility for the previous 4 years of my life (I guess it is suitable at this juncture to mention that I am 27 and that I have worked full time since I was 18 - I have done school off and on along the ways). I also had to deal directly with Sikorski Support and Lockheed Martin, as their operations were in the same town and were related, and so I met people along the way.

As far as #9 is concerned, I solicited advice; I didn't promise to believe it ;) Seriously though, this is kind of a spitball session for me where I am hoping to get a considerable amount of BS, hopefully encrusted with slivers of gold (perhaps from goldscholger?).

Thank you for the tips and the entertaining read - #2 & #3 are things I never thought about and are things that I will be considering from now on!

-Matt

<comment><USER9> Goto a cheaper grad. school - a state run one. I'm going to san diego state and its waaaay cheaper than most schools and great for what i'm doing (applied math). Professors are almost the same everywhere (some good, some bad) and grad students are into what they study independent of location. If i was in- state, i'd pay only $4k/year in tuition, which is an order of magnitude cheaper than private schools. You might incur a bit of debt while working towards a masters, but you'll learn a ton along the way and be very practical, which is what a masters is for anyway - apply all that theoretical knowledge to a real situation under the guidance of those who've do that all the time.

</comment></comment></comment><comment><USER10> The really short answer is "how to code".

Forget technologies; forget grades. At best, they will get you in the door for an interview. They won't make your a productive employee.

If you can produce working, deployable software on your own, then you will succeed. Not that many people can, honestly. If you aren't sure if you can hack, then pick a problem and solve it. If at the end of a week you can give your software to someone else and have them use it successfully, you should be fine.

Everything else is fluff, and can be learned on the job. If you can hack, you'll do fine.

<comment><AUTHOR> "'If you can hack, you'll do fine."

Thats what I am hoping for. It can just become overwhelming for a young-buck (such as myself) when seeing all these frameworks and libraries and trying to figure out which ones my future employer will want used. In my CS studies, we have focused on a lot of 'whats under the hood' (aka linked lists, binary trees, etc,.) and so when I see these frameworks, I cannot help but think "which one do I use? Can't I just write the algorithm myself?!"

If I am understanding you correctly, if I can do this (know what is going on under the hood), then the rest of the cards will fall into place (?).

Thanks ajross!

</comment></comment><comment><USER11> Beyond technical skills, there are also people skills:

1\. People make bugs, you make bugs. Playing the blame game is not productive, even if and especially when it really is the other guy's fault. Learning how to be diplomatic is important.

2\. Big companies like to pretend that we are machines, but we are not. Be aware that your coworkers have egos, feelings and emotions, and they do not behave like machines. Machines don't try to hide their bugs instead of fixing them because they don't want to look incompetent, for example. Machines won't get hostile and obstructive if you don't like talking about their pet dogs during lunchtime.

3\. The interests of the company are not always or not ever aligned with your own self interest. If you do good work but your boss doesn't know about it, it's like you didn't do it. A good manager will reward you fairly for working harder. Don't accept pats on the back or "employee of the month" awards for unpaid overtime. Only accept substantive incentives, like larger bonuses or faster promotions, etc.

4\. A lot of times there are genuine incentives for an employee to intentionally write obfuscated code -- it makes it more expensive for the company to fire her. You just have to deal with it, and recognize that you should also have some similar kind of leverage with the company.

<comment><AUTHOR> I pride myself on my interpersonal skills - I just think it is easier and more productive to be friendly (or at least amicable). Hopefully I can carry this with me into the development arena as you suggest, though I don't think it will be too much of a stretch :) As for #4, 'sneaky, sneaky!' Thanks for the tip. Though I don't think I could intentionally obfuscate my work (just seems dirty), I think that there are other ways of leveraging in a similar manner and I will definitely be keeping this in mind.

Thanks dusklight!

</comment></comment><comment><USER12> First off, feel free to start interviewing now. Most places have a 1-2 month lag time between initial contact and the day you start the job.

Second, don't feel obligated to take the first job offer you get unless you're ok with drifting from job to job like some people are. It's better to have some focus about your career and doing what you enjoy. If they offer and you honestly don't think it's a good fit keep looking.

<comment><AUTHOR> I have done this on a limited basis, but everyone wants me to start now and wants to pay me crap. I understand that I will have to start lower because of my lack of experience, but on the other hand, I didn't go to school (and pay for school) to start working for $9/hr from some small company. I have had multiple companies try to hire me on for less than I would make working at McD's - all because they are going to be 'paying me with experience'.

I think this sentiment is where you second note comes to play: I am not going to take these jobs :) I guess I will do what I've been doing and just keep my feelers out until the right thing comes along.

Thanks angstrom,

-Matt

</comment></comment><comment><USER13> Matt -

From my experience success as a developer is about your ability to learn, not a list on a resume. That you wrote this message makes me think you're on the right track.

Money will come when you're good at something. It's easy to be good at something if you enjoy it. Moving to a particular technology (only) because the money is good is generally a bad idea.

<comment><AUTHOR> Thanks wehriam, Of all of the things that I am 'sure of' as a result of my education, my ability to learn something foreign would have to be it. I remember my first C class - swearing that there was no way this voodoo magic could ever make sense and actually be put to work and then by the end of the class having to reference the examples less and just knowing more.

Thanks for the encouragement,

-Matt

</comment></comment><comment><AUTHOR> Sorry to everyone who has posted here that I have been unable to respond to. This thread grew quickly; which is FREAKING awesome - there is a list (on paper) growing on my desk every couple hours from the nuggets that you all are providing. I am a bit under the weather at the moment and have not been able to compose very intelligent responses (its difficult when your head is in the fog of theraflu and tussin). I have been really nervous about moving to the next phase (aka education to employment), but this thread has really shown me what I need to focus on more (a good deal of which I suspected, but now 'know' because of all of your help) and what I already know that I need to carry with me. Thankfully, much of what you all have said has let me know that I am aware of more of the basics than I previously thought. What I do not know, I now know that I need to know :)

Thank you again, to all of you! This thread is more valuable to me then I could ever express with a simple 'up' rating :) Your time and words mean a lot, so again, THANK YOU ALL!

-Matt

</comment><comment><USER14> Programming isn't rocket science...there are elegant ways to solve problems and brute force methods, but in the end the only thing that matters is that it works and the client is happy. There isn't much they will teach you in school that will really make you that much "better".

The biggest difference between school and work for me was the process and the environment. Some of the big things I saw: * version control and development process * rapid bug fixes and changes * managing your own ego * testing your own code * working in teams, dealing with other people's code

These things are almost impossible to learn on your own. They are all things that can inherently only be learned in teams. Which I think is the big difference between school and your career...school is about you, your career will be about what you can produce with others. You need to find a project, anything, and get some experience working with a team (even a two person team). That's my two cents

<comment><AUTHOR> "That's my two cents"

And I thank you greatly for them as I, myself, only have about 1/2 a cent right now :) I am seeing a lot of reoccuring themes there - notably version control, egos, teams and testing, and from this I know where I need to go next.

So, again, thank you for your cents!

-Matt

</comment></comment><comment><USER15> Learn to write concisely and clearly. (eg, don't use "feel" as a catchall for "believe", "think", "be", etc. Cut out useless and passive phrases: "Clearly", "where time and willingness permits".) Writing clearly is necessary for thinking clearly.

The reason your question has been asked & answered so many times is that it is too broad. Do you really think the people writing simulators at JPL have anything in common with a cubicle drone at a bank? Would Java help a games programmer, or a modeler at ILM? No -- no more than compiler design is relevant to a cubicle drone.

I suspect you have not yet found anything you love to do. Figure that out first and the rest becomes easier. I advise you ( _you_ , not everybody) to take a "money job" at a reasonably tech-oriented company and learn as much as you can. Do projects on the side, etc.

<comment><AUTHOR> "The reason your question has been asked & answered so many times is that it is too broad. "

I believe this to be an inherent byproduct of the asker's current phase in their own personal development. When we ask, we are curious and unsure of where to go next. I know the question is broad, as too are the answers, but again, this comes from the fact that we are asking the 'seasoned' members of a community for insight - insight gained from experience that we simply do not yet have ourselves. Although I know there is no definitive 'ANSWER' for this question, I do believe there to be beneficial and constructive input on the topic that may still be made - hence, why I asked.

As to your suspicions pertaining to my lack of finding a passion in all of this, I think you may possibly be correct. Don't get me wrong; I love computers, languages, semantics and technology in general. One of my favorite pass-times when playing with a new language is to implement some of the algorithms and concepts from my advanced algorithm design and discrete mathematics classes - its just fun to me. Despite the entertainment found from doing exercises such as these, I have yet to find 'that special thing' that drives me to working until 3 a.m.

I think that (for me) you might be correct; I was discussing this very same "money job" topic with my wife before reading your response. It just seems logical, considering my current knowledge (or lack thereof), to find a tech oriented company to work from, hopefully encounter some mentor-types along the way and learn what to do from there.

Thanks aristus7,

-Matt

<comment><USER16> I've been through a few jobs in the last few years, and I keep looking back at them thinking "What an idiot I was for doing X" (for many, many values of X). But then I realized that I hadn't really defined myself, my views on software and development, business, etc. I was like someone who could run, jump, do jumping jacks, etc, who went around saying "I want to do sports for a living". I had basic tools and skills, but no direction. It sounds a little embarrassing to say, but how else was I supposed to gain direction without going through different experiences?

If you're not sure what you want to do or what really drives you, don't be afraid to take a decent looking (but not necessarily dream-) job offer, stay a year or so, then go to another _different_ type of company. Think of it as a slow, well compensated data collection process that will lead you to a better understanding. Sure it sounds lame when put next to the laser-focused entrepreneurial stories on HN, but so what? Do what's best for you (and your family - important consideration).

PS If you do that, don't forget to code and learn something _completely_ different in your spare time. That push/pull helps you grow a lot faster and benefit both parts of your life. Right now I'm .Net by day, Lisp by night. How much more different can you get?

</comment></comment></comment><comment><USER17> Here's what I did, and it worked out really well for me (I made $68 / hr last year, 3 years out of undergraduate). I got a job that paid a miserly $30,000 / yr at first, but it was a small company and I got tons of experience. I was in way over my head at first as you can probably guess from reading everybody else's posts. But I worked and learned hard, and after that it was a piece of cake.

If you are like me, I only wrote a couple of thousand of lines of code in college. I'm up to somewhere around 150,000 now, and I feel proportionally more confident and capable. I just scored an internship at Google actually.

Then my only problem was that I got bored, so I'm spending all that money on a masters degree, which I am thoroughly enjoying.

</comment><comment><USER18> Worry aboout having fun now and the money later. If you worry about the money now, you might end up chasing jobs with high pay and little future then you might get used to the money and the fun jobs will look too risky. But if you're having fun, learning new things the money will be there eventually because you'll be making yourself more and more valuable.

Here is a good post that I think should give you some specific answers to your questions: [http://steve-yegge.blogspot.com/2008/03/get-that-job-at- goog...](http://steve-yegge.blogspot.com/2008/03/get-that-job-at-google.htm)

</comment><comment><USER19> You should know that the world is starting to slowly figure out that programming is not like a manufacturing plant at that finding the cheapest possible labor to do it is sub-optimal.

As such, you should (hopefully) have better opportunities as a developer now than was the case a few years ago.

I'd recommend finding a team that you'd be really happy working with and can learn from. The standard deviation on compensation is not that high in your early career -- but that on fun and learning is. Pick the right group to work with, it makes all the difference.

</comment><comment><USER20> Long story short:

Version Control (Subversion, Git) Test driven development / Continuous Integration Waterfall vs. Agile Practice talking to customers about what they want (not sure how you do this without actually having customers) Databases (MySQL, SQL Server are decent starts and commonly used) Apache / IIS (depending on your platform) Pick a scripting language and learn it well enough to automate things that are annoying. I like Ruby, but Python and others are reasonable alternatives.

</comment><comment><USER21> I'd recommend getting familiar with Windows, Mac, and UNIX/Linux environments. A lot more opportunities open up to you when you're competent in each of the Big Three operating systems; you don't have to be a guru, just be experienced enough to work comfortably in any of them.

It also gives you a chance to personally evaluate their strengths and weaknesses and to see the design tradeoffs.

</comment><comment><USER22> I'd say the old standby of "it depends."

There are a couple things that my college degree never taught me:

\- source control. If you're going to be in the MSFT stack, learn how to use VSS. If you'll be in the LAMP stack, then learn svn. You don't have to know how to administer them, just how to use them on a day to day basis.

\- databases. Learn to write queries (select, update, insert, join, create, alter, etc.). Learn SQL Server and mysql and oracle syntax (probably not in an out, but enough to know that there is a difference).

\- use cases and UML. Large companies and consultant shops will tend to produce a lot of documents. If you know some UML and are able to make use case documents, then you'll be ahead of the game.

\- build and deployment. Learn (n)ant, build, make, shell script, whatever. Be able to build a piece of software and deploy it. It amazes me how many pieces of software have no automated build or deploy scripts.

The question is how do you get this knowledge. It's too late now, but you should have tried to either get an internship or a job while you were in school. Now, I would pick something that you think would make a good project and actually build it. Not just start hacking, but think about the problem and really build it. If you are going to get a corporate or consulting job, this is what you'll have to do, so get used to it :)

Pick something you're reasonably knowledgeable about and that you think that you'd want to use or someone else would.

Here's a couple good ideas: \- student/employee/company directory application (I've written at least 3 employee directory apps for clients. If you could write a good one, this would be a definite way in to some places). \- movie/bar/store/music/concert review webapp \- twitter clone \- facebook clone \- cms tool (think lightweight cms) \- carpool creation site

All of these can be shelled out in a couple days with RoR/Django and would give you a HUGE confidence boost and would be a great addition to a portfolio. Of course, using a framework with obscure the sql details so maybe you'll want to do it in ASP.NET with C# (VB.NET is _not_ what you want to know if you want to be "in demand") and then do it in RoR/Django to get a feel for one vs. the other. In fact, you could make a business out of them (if they didn't suck too bad!).

I would use them as a learning tool, writing some rudimentary use cases for what you want the app to do, diagramming a bit of your preliminary design (and it will change, it always does), building a db schema, running queries, writing code and integrating with a source control system. Treat it like a job too and dedicate at least 3-4 hours a day 5 days a week to it.

I think the biggest change for full time students that don't work to handle is going from 12-15 hours a week in school to 40+ hours a week at a job. At school you have 5 times more free time than you do at a job.

<comment><USER23> I may be unusual, but I have more free time in the summer, while working full- time programming, then I do during the school year. But maybe that is because I'm taking 17 credit hours (5 CS classes, all upper division) at once. I probably put in 60-80 hours a week, no exaggeration.

<comment><USER22> I'd say that you're doing the wrong thing.

I went to school full time (min 12 hrs) and worked full time (min 40 hrs, sometimes 2 jobs) the entire time I was in college (hey graduated with only $7k in debt though!). There is no way I'd have been able to, let alone wanted to put in 60-80 hours for course work (still graduated cum laude, 3.5+ gpa). Either you're in courses that you shouldn't be or you're doing too much "extra work."

JMNSHO though...

<comment><USER23> You may be right. This is the last semester of my Senior year and I'm trying to finish my undergrad up so I can start on my Master's next year. My Junior and Sophomore years weren't as bad school wise, but I was working part-time during both of them, so all in all I was probably still busy about 60-80 hours a week. I guess my point is that I've gotten used to being really busy, and working only 40-50 hours a week won't be a problem. Sounds like you're used to being busy as well, working full-time all the way through school.

</comment></comment></comment></comment><comment><USER24> i think the biggest difference for me was this:

the "best" solution isn't always the right solution.

</comment><comment><USER25> Congratulations on graduating. There is a lot of excellent advice on developing into a better programmer here.

Programming can be challenging and financially rewarding. And it can give you the money to do the things you really like to do (which is up to you). Expect burnout. It happens to most everyone.

If you are nervous interviewing, there is a fundamental behavioral-based interviewing technique that you should know. A professor's husband told me the secret (so many people do not know the secret to interviewing well [programming trivia/programming whiteboard stress tests aside]). Google "STAR" + interviewing. Or I can do a short essay. Take interviews to practice - <USER2> if you're not necessarily attracted to the particular company. Actual practice (even mock) desensitizes you so you can shine better. After your interview, mail a typed, hand-signed letter to your main contact - in it thank them and _this is key_ tell them you will followup at such-and-such a date and time (imagine which candidate will stick out - the one who took the time or the one who could care less to put effort in _formally_ conveying interest in landing the position). CollegeGrad.com is an excellent resource (and a has a book worth buying - the advice landed me my first job) because someone who was a hiring manager opened-the-kimono on what he expects (from cover letter to screening interviews to site visits to even salary negotiations).

Before you start your job, consider taking some time off. To pause before you start your career. Ideally, travel. Or do something you like. Once you start working, your longest vacation will probably be two weeks long. The hardest adjustment is from a collegiate environment to a professional one. With few exceptions, all of us you meet on your first day of work have much more work experience. Your "first day" may feel like its a big deal but to us grizzled workers - it's not. Therefore humility is important. Don't show off your knowledge. Ask questions about what people are doing. The more you talk, the more they'll realize what you don't know. But if you don't talk a lot and ask smart questions, they will assume you are smart. On the flip side, take the initiative if there is something that interests (or more likely bothers you about the way something is being done) - we get sometimes blind-eyed to the problematic parts of a project - fresh perspectives help. Just be diplomatic.

Mentoring. Find a mentor. Don't force it - you have to become friends first. Ideally someone who is 3-5 years older and ahead of you and at a position where you want to be in three years.

Where do you want to be in 1/5/10 years? I started out with a group of college grads who unlike me got out of their cube and took on initiative and have easily jumped 2 or even 3 levels (e.g. managing 60-70 people). I'm still a developer - I never really was interested in management but I need to emphasize that you need to be proactive if you want to move into management.

On a side note, once you leave college you may fall out touch rapidly with your friends, especially if geography is involved. Facebook helps but if you truly want to keep in touch with your friends - you should take the initiative - organize reunions (e.g. annual trips to New Orleans Jazz Fest). And (Facebook helps again), have a system to remember their birthdays (and call them).

<comment><AUTHOR> I think that it has been hardest for me to find a mentor or even people in similar situations as a result of my education being primarily online for the last year - a decision I really regret making now. My wife took an accounting job in a different city and Troy University offers the CS degree online (primarily for the military) and so I have been completing my senior year on the computer. This has made it difficult to meet people who are doing what I am doing and to share our experiences about our journeys - thats why I turn to kind people such as yourself ;)

I have joined some computing and programming groups here, but it seems like most of them work together and the group is just an excuse to eat and catch up on people's families and such. If I mention group coding or similar activities, generally, the response is 'we should' and then no one can or does... I feel like this is what I am missing the most - just being able to lean over to my neighbor and asking 'hey man, how do you think you would do this?' or 'How did you get that to work like that?' The personal touch, you know?

Thanks for the tips wallflower!

-Matt

</comment></comment><comment><USER26> Hey Matt,

Here are a few of my own humble suggestions for you. I've been developing for 23 years and have been in OOP on the Microsoft platform of tools for 10 years:

1) Most of the bulleted items below are great. Dusklight has some VERY important things to say, as being a developer is surely NOT all about slinging code.

2) Nearly everything JFred said below is great advice. However, I very humbly do not agree on his #1 recommendation. If you are a programmer, then be one. If you are a manager, then be one. If you try to be what you're not, then you'd be happier stocking shelves at China-Mart at night. Concerning the upper tier of income for developers, they make more than the managers, have way less stress, easier schedules and WAY more fun. Consequently, every single developer I've ever known that has climbed into management has loathed it. I personally know a CTO who hated his job and busted himself back down to programming. Same for a former corporate department director...went back to programming (each making around the same money, BTW).

3) Now that you're graduating, your education is only now starting. Put www.bookpool.com in the top 5 of your bookmarks...buy everything from them (unless someone can give you a better, cheaper alternative).

4) Don't think on this one, just do as I say: Buy every single Head First book you can, starting with the ones you know you'll be using right away: "<http://www.bookpool.com/ss?qs=head+first>" Buy the "Software Development" and "Object Oriented Analysis & Design" books immediately. These are not quite as daunting as some of the other books out there that practically speak to us in machine language.

5) If you end up going down the Microsoft path of development, then focus on C#, not VB.Net. This is an extremely religious subject, so please don't allow me to explain. I have an entire word document I created as to why. If you do indeed go down this route, then buy the following Wrox Box as soon as you're able: <http://www.bookpool.com/sm/0470048409>

6) Subscribe to every coding newsletter you can related to your chosen technical focus and create a rule in your email client to funnel them into a folder. Read them.

7) In my humble opinion, you're like a hammer without a handle if you can program but don't know SQL and a DBMS or two. You may already know this, but Microsoft's DBMS is SQL Server.

8) If you do go the Microsoft path, you can get versions of Visual Studio and SQL Server Express for free. Also, since you're a student, they've also recently come out with plans for you. Download what you can while you can before you leave school!

9) Go out to various auction type development sites to bid for jobs that'll allow you to not only practice and hone your skills, but will also give you a small stipends and give you another notch in your resume. Example: www.rentacoder.com

10) Relax. You're going to do great!

Boyd

<comment><AUTHOR> Thanks Boyd, I have checked out the design patterns head first book and it was incredibly intuitive and even entertaining to read. I have obtained a couple more since, I just have yet to wade through them as of yet... I am going to stop procrastinating on it and start reading them - tomorrow ;) I have recently come to realize the importance of knowing a database (and management) system or two. I kinda always knew that would be something I would need to get a firm grasp on - something confirmed from your and other's words on this thread. I feel that to be at the top of my list. I have read theory, best practices and paradigms for four years now. I think I have come to a crossroad where the application of all this theory and mess is the next move; a move where databases will be important.

Thanks for the words of encouragement, Boyd.

-Matt</comment></comment>


Homework 4: Man-on-the-Side Attacks - <AUTHOR> https://www3.cs.stonybrook.edu/~mikepo/CSE508/hw/hw4.txt

<comment><USER2> It's a lot easier if you can cause the traffic to hijack to take a circuitous route through the Internet...

[http://www.wired.com/2013/12/bgp-hijacking-belarus- iceland/](http://www.wired.com/2013/12/bgp-hijacking-belarus-iceland/)

or more recently:

[http://research.dyn.com/2015/03/uk-traffic-diverted- ukraine/](http://research.dyn.com/2015/03/uk-traffic-diverted-ukraine/)

</comment><comment><USER3> I was at first excited about an undergraduate program that would have homeworks like this, then I saw the PhD tag.

Something like scapy is perfect for this, I'm not sure about the speed though.

<comment><USER4> I took the undergraduate version of this class (at Stony Brook), the homework assignments were similar (usually, just the graduate version with a slightly lower bar to success - I partnered with a grad student so I had to do the graduate version.)

Our assignments were (1) a toy implementation of RSA, complete with the ability to generate SSL certificates (so, ASN.1 encoding, etc) using only a bignum library and (2) implementing a known buffer overflow attack on an old version of sendmail. ( [http://web.nvd.nist.gov/view/vuln/detail?vulnId=CAN-2002-133...](http://web.nvd.nist.gov/view/vuln/detail?vulnId=CAN-2002-1337) )

[https://web.archive.org/web/20140106173814/http://www.cs.sto...](https://web.archive.org/web/20140106173814/http://www.cs.stonybrook.edu/~mbaig/courses/cse509ta/project2.html)

</comment></comment><comment><USER5> I see the site itself is using obsolete cryptography as per Google Chrome [http://i.imgur.com/cF0SAmN.jpg](http://i.imgur.com/cF0SAmN.jpg)

Don't know if its relevant to the submission :)

<comment><USER6> I would wager that the crypto settings are done by some central IT organization within the school. Experience would suggest that the CS professors think the sys admins are a bunch of amateurs, and the sys admins probably think the professors are snobs with no appreciation of cost and "real-world" applications.

</comment></comment><comment><USER7> Ha, that's an interesting idea.

About 2 months ago -- for a presentation about being vigilant with your smartphone on public APs -- I implemented a toolkit that was essentially a man-in-the-middle/evil twin -- a single channel BSS analysis tool which allowed for broadcast and targeted deauth injection along with a probe request monitor, all in one interface, and a DNS spoofer in the other interface. I used HostAP for network spoofing. Its the simplest exploit but was _very_ interesting building the demo and the kids enjoyed it!

This is another good little attack piece to shove in!

</comment><comment><USER8> [http://en.wikipedia.org/wiki/Man-on-the- side_attack](http://en.wikipedia.org/wiki/Man-on-the-side_attack)

<comment><USER9> Comparison of MitM and MotS

                             Observe    Inject    Delete    Modify
        Man-in-the-middle    X          X         X         X
        Man-on-the-side      X          X
        Packet Sniffing      X

I wonder if the other combinations have names too.

<comment><USER10> one wonders what the difference between "delete" and "modify" is...

<comment><USER11> modify = delete + inject?</comment></comment></comment></comment>


Tips for Naming Computers - <AUTHOR> http://c2.com/cgi/wiki?TipsForNamingComputers

<comment><USER2> At my last job, the infrastructure guys were wild for virtualisation. All the actual physical servers were just hosts for VMs, which did actual work. VMs were created for some need, and destroyed if that need was no longer felt. Therefore, no machine ever changed purpose: physical machines were only VM hosts, and virtual machines were destroyed rather than reused.

As a result, we were able to name machines after their functions without running into the traditional problems that stem from that. Sadly, this left us with a terrifically dull naming system: physical machines were kvm-001, kvm-002, etc, and VMs were fooapp-001, fooproxy-001, foodb-001, etc.

<comment><USER3> I guess if you're running 5 servers and each one has 4 functions, more "interesting" naming schemes can work. But once you're dealing with more than a few machines, functional names are necessary. When I see a machine's name in the logs, I _really_ don't want to have to infer the machine's function by remembering whether "Zapdos" is a pokemon or a character from Star Wars. I want a name like "dc1-cluster5-rendernode057" that tells me what the machine does and/or where it sits on the network.

Even with physical machines: if the function changes, the correct thing to do is re-name and re-image it, and not worry about the fact that the physical box is the same. Your physical maintenance records should be keyed by something like asset tag anyway.

</comment></comment><comment><USER4> I like to choose computer names after pokémons. The names usually are simple, it's easy to follow some general rule to give names (get the last 9 bits from MAC Address, add 1 and check which pokémon have this National Dex number), you can choose wallpaper colors related with the pokémon color, there's a lot of pokémons to prevent name collisions and new pokémon games which present new pokémons are introduced faster than you have need for new names.

<comment><USER5> I also do the Pokemon naming scheme, but I've never considered that they get released faster than I add servers.

</comment></comment><comment><USER6> At one company I worked at we named the two border routers after two hot girls from Sales.

Not sure it's a best practice though.

<comment><USER7> We're talking about computer names here which is admittedly a very nerdy topic but can we do so without descending to this level? You may find that funny, but it merely contributes to the stereotype of technical folk as basement- dwelling closet cases.

Even if you are so insensitive to not recognize how disrespectful this is, you should at least be able to appreciate that it is a legal risk.

If I were to discover any such juvenile shenanigans in my group it would be grounds for immediate termination.

<comment><USER8> Sure, just like impersonations of your boss are ill-advised. But funny to a certain at of people (your boss probably not being a member of that set).

I suspect you haven't said anything he doesn't know.

</comment></comment></comment><comment><USER9> Since nobody's already mentioned it: [http://namingschemes.com/](http://namingschemes.com/)

</comment><comment><USER10> One solution which tends to obey all of these rules is to choose the names of people from some common category, such as famous mathematicians.

<comment><USER7> Philosophers work well too: leibniz, spinoza, kant, russell, quine, nietzsche.

At various times I have used European capitals, characters from Futurama, characters from Dr Who (although everyone fought over who got 'k9').

Naming machines can be a lot of fun, and helps building a friendly organizational culture. It also ascribes some personality to what would otherwise be a deployment of 'lobotomized Unices.'</comment></comment>


A captcha so fiendish only a robot could solve it - <AUTHOR> https://twitter.com/chadloder/status/1096244831645356032 <comment><USER2> Yes that does look like a colour blindness test.

For example: [https://www.allaboutvision.com/eye-exam/color-blind- tests.ht...](https://www.allaboutvision.com/eye-exam/color-blind-tests.htm)

</comment><comment><USER3> Is there any evidence this is real? Seems like a joke to me.

<comment><USER4> My instinct is to say this isn't real.

The biggest hangup I get is that I think this would be trivial for a robot to solve. There's no distortion on the text, would this really pose a problem for OCR?

Beyond that, I can't remember the last time I got a captcha from Google that wasn't image classification.

I do think it's plausible someone could get a captcha that wasn't colorblind accessible. I don't think it's plausible they would literally get an eye exam for a captcha. But :shrug:, maybe I'm wrong.

</comment></comment><comment><USER5> Shrug. Seems ok to me. Maybe I'm a robot.</comment>


If work dominated your every moment would life be worth living? - <AUTHOR> https://aeon.co/ideas/if-work-dominated-your-every-moment-would-life-be-worth-living <comment><USER2> With a question in the title, I foolishly read this hoping it may contain a hint toward a way to make work-as-life feel less soul-sucking or offer a way off the treadmill.

Instead I had the pleasure of reading a paper that talks about a "hypothetical" scenario that encapsulates my and countless others daily, anxiety ridden waking nightmare of an existence whose only off-ramp is severence, retirement or death.

So, to answer the authors question;

If work dominated your every moment would life be worth living?

No, but what choice do you have?</comment>


Humans did this to other humans - <AUTHOR> http://en.wikipedia.org/wiki/Action_T4 <comment><USER2> Perhaps even more horrible was that there were people who supported the ideas of racial hygiene around the world at the time. Perhaps we're not as civilised as we like to make ourselves out to be.</comment>


Show HN: Snapmeet, Remote meetings with realtime notes and video, built with React - <AUTHOR> https://snapmeet.io

<comment><USER2> Co-founder here: This is our first node/react/flux app, coming from a rails/angular stack. Happy to discuss our experience and answer any questions!

<comment><USER3> Really a nice idea. In your opinion React delivers the promise to get out all the business logic of the UI? And how much time to develop the site? Any tutorials or resources recommended?

<comment><USER2> I think it does, although you're always free to hack it :P I've definitely thrown some ternary operators in my render methods for simple conditionals in order to avoid heavier solutions.

Re: time; The team is me and my cofounder. I'm full time dev, my co-founder splits his time between ops, dev, and business stuff. First commit was March 18, but we were splitting time with our previous product attempt for about a month of that. So maybe call it 3 months of full time dev work? That included quite a bit of learning beyond React; the whole stack is new to us (Node/Express, Neo4j, Socket.io, ShareJS, SimpleWebRTC).

For coming up to speed on React, I definitely spent a lot of time with the Facebook documentation, which is decent. For flux I hit pretty much every resource linked on the flux github repo, but I think the best overview I came across was this video by Jing and Bill from FB: [https://www.youtube.com/watch?v=i__969noyAM](https://www.youtube.com/watch?v=i__969noyAM)

This thread (which they both participate in) is also helpful for thinking about your server communication. : [https://groups.google.com/forum/#!topic/reactjs/QQ-0dJ4eYUc](https://groups.google.com/forum/#!topic/reactjs/QQ-0dJ4eYUc) I feel like that's a topic not well covered elsewhere in docs

Also, keep an eye out on Stack Overflow. It looks like Bill spent a lot of time answering flux questions. You might find it worthwhile to read through his answers to flux things: [http://stackoverflow.com/users/395379/fisherwebdev](http://stackoverflow.com/users/395379/fisherwebdev)

Hope that helps!

</comment></comment></comment><comment><USER4> Also built with Neo4j!

[https://www.reddit.com/r/Neo4j/comments/38dfju/neo4j_backed_...](https://www.reddit.com/r/Neo4j/comments/38dfju/neo4j_backed_remote_collaboration_app/)

</comment><comment><USER5> I've tried this out in a meeting with a couple of other people. It worked pretty well! I work remotely and this is definitely shaping into something really great.

<comment><AUTHOR> Thanks! What's missing from your current toolset, and what would you like to see here?

<comment><USER5> Audio-only chat would be nice - we use skype, and audio only is our default. If there was a way to make the notes area be a code editor, or have two tabs - one for notes, one for code, that would be really nice. We use google docs a lot, but its terrible for code, so sometimes we use collabedit. Finally, it would be really nice if the notes/todos could integrate with something like an issue tracker or project management tool.

<comment><USER6> I second pretty much everything in here.In my meeting we were essentially working together grooming a github issue- I could imagine that issue being addable as a tab behind or instead of the notepad.</comment></comment></comment></comment>


Wilson Sonsini Term Sheet Generator - <AUTHOR> http://www.wsgr.com/WSGR/Display.aspx?SectionName=practice/termsheet.htm This is a pretty amazing new development on the road towards open source law. <comment><USER2> Yokum is good people, constantly helping the entrepreneurial community understand the legalities and intricacies of funding and organizing start-ups.

Check his website: <http://www.startupcompanylawyer.com/>

<comment><USER3> Totally agree.

<comment><USER4> Thank you for the kind words.

</comment></comment></comment><comment><USER3> In 1999 I worked at Petstore.com (a competitor to the sock puppet firm) and we used to joke that we were going to create a website "termsheet.com" which would generate a term sheet we could then use in negotiation with VCs. WSGR built it! Now every entrepreneur will be able to say to a VC, "we have a term sheet...and need to know whether you are in or out..."

I wrote a review of the WSGR term sheet generator here:

[http://www.altgate.com/blog/2009/04/law-firm-wilson- sonsini-...](http://www.altgate.com/blog/2009/04/law-firm-wilson-sonsini-now- preparing-term-sheets-for-free.html)

<comment><USER5> > Now every entrepreneur will be able to say to a VC, "we have a term > sheet...and need to know whether you are in or out..."

Maybe if there is another boom and certainly not in this economy ;)

</comment></comment><comment><USER5> Good stuff. WSGR continues to shine in helping entrepreneurs!

WSGR is literally a 'textbook' example of what a good law firm is. In my graduate entrepreneurial finance class, we studied a case where an entrepreneur had to choose between giving Rosati a non-trivial amount of equity in return for legal services or going to another law firm. Not knowing how important good lawyers are, when the professor suggested going with Rosati was the best course of action, I strongly argued against it. Since then, every time I have encountered a story about WSGR (often about Yokum and often on HN), I have been reminded of how wrong I was.

<comment><USER4> Thank you for the comment. And I'm pretty sure that you are not someone from our marketing department. :)

<comment><USER5> No I am not. Actually the idea of giving equity in exchange for a service still bothers me (like the ad on HN the other day for an apartment for rent in exchange for equity) but I have learnt the credibility that one earns from having a great lawyer can make all the difference, especially early on.

</comment></comment></comment><comment><USER6> Do YC provide companies work with a standard term sheet?

Has anyone checked to see what WSGR comes up and compared it to the standard YC term sheet?

</comment><comment><USER7> now if I could only find the Sequoia one...

<comment><USER8> Sequoia uses WSGR for counsel.

<comment><USER7> it was a joke</comment></comment></comment>


Ask HN: Setting up a small office server? - <AUTHOR>

Hi HN,
I have a quick question I'm hoping someone will be able to help me with.  I intern at a Hi Def production company in NYC. We're small but very capable and we want to create our own server that we can use to allow clients to FTP large files to and from - our web server simply doesn't cut it for this purpose.
I have an old G4 Mac at my disposal, and am pretty familiar with Linux. We need the server to appear visible on a Mac network, and be accessible through FTP software from anywhere in the world, by our clients (who we'd obviously give a user name and password to, to allow them to access specific folders).
What's the best way to go about this?  Any tutorials you can recommend? I'd really appreciate anyone who can steer me in the right direction. <comment><USER2> I'm not sure what you mean by "visible on a Mac network" and why that is necessary . . . won't an IP address and maybe a domain name do ?

If you were doing this with Linux, you should install a common linux distribution (to make sure it won't have security problems out of the box) and then go through and turn off anything that doesn't need to be on, and check it using nmap to see what ports are still open. If you want to educate yourself and go further then download metasploit and see if you can break into it.

Install vsftpd as the ftp server, and make sure it does not allow anonymous login, and make sure the passwords are long and random. If you have ssh on it, which you probably should because you should encourage your people to use scp instead of ftp (graphical tools exist for the mac), make sure you install denyhosts or something similar to keep out the brute-forcing attacks. Try not to have commonly guessable usernames, such as "tom" or "joe" and disallow root login.

But if you have a Mac, can't you install or turn on the Mac's ssh or ftp server and do the same ? That might be simpler.

You might also google for "The Perfect Ubuntu Server" -- there is a series of howto's on how to set up the "perfect" server in various linux distributions.

<comment><AUTHOR> First off, thanks for the response.

To answer your question and maybe clarify things a bit more - the owners want to be able to simply drag and drop large media files that have been sent by clients onto their local machines (Mac desktop Pro setups with Final Cut Studio 2), where they can then edit the clips, if possible. Our current hosting provider for our website only allows for FTP of files no larger than 20 mb at a time, and when you work with video, you have gigs upon gigs of files - so most companies would simply mail over hard drives, but obviously this is a major hassle. Thus the need for a new solution.

Of course, if you're suggesting that I might be able to accomplish this with mac software, out of the box, I would consider that...

<comment><USER3> Just using OS X would be a good option for you.

If you check out Sharing in the preferences menu you will see you can set it up to allow ftp connections and from within your own network, easy as that!

Hope you have a good connection over there! ;)</comment></comment></comment>


Mozilla's $10,000 Security Bug Bounty for Certificate Verification - <AUTHOR> https://blog.mozilla.org/security/2014/04/24/10000-security-bug-bounty-for-certificate-verification/

<comment><USER2> In my experience, bug bounties are most effective when targeted at a specific component of an application. You get less of a gold rush mentality for simple issues that existing toolsets (such as fuzzers) can find.</comment>


Browserapi for new browser functionalities - <AUTHOR> https://github.com/hwclass/browserapi <comment><USER2> An interesting idea.

If it meets the guidelines, this might make a good "Show HN".

Guidelines: [https://news.ycombinator.com/showhn.html](https://news.ycombinator.com/showhn.html)</comment>


Show HN: App in Review - <AUTHOR>

I'm one of the creators of App in Review. My buddy and other creator, Mubs (@mubashariqbal), approves this message.
We recently submitted our first app into the Apple app store and began the indeterminate waiting process. There is no visibility into Apple's review process, which is fine because all we want to know is where in the line are we? Even a rough guess would be fine.
It was during this waiting process that we had the idea for App In Review. A little site where iOS developers can share the apps they've submitted and how long they've been in the Apple review process.
With enough people simply posting when they submitted we might be able to get a better idea of just where our apps are in the queue, and how long it will be until they get reviewed. When it comes down to it, we're all impatient.
Would love your feedback, and if you're an iOS developer we would love for you to add your apps! There's nothing more in it for us, this a tool for the community, by the community. Happy coding!
http://appinreview.com/ <comment><USER2> Cool, but I don't think this will give developers any clue about where they are in the queue. There's probably hundreds if not ~thousands of apps submitted daily? If you're a new developer you're probably really excited about getting on the app store, but after the first couple submissions, you'll be like "meh, I have work to do".

<comment><AUTHOR> Perhaps you're right, but it still is possible that we could see apps submitted earlier the same day as you go into review, thus increasing the likelihood that yours is too. All it takes is a few extra seconds for the dev to paste app info here.

If it doesn't help anyone, no harm done!

</comment></comment><comment><USER3> One of the biggest challenges with something like this is that not every app is treated equally in Apple's process. If you have the ear of the right person, you can get your app bumped up in the queue. I don't know how often this happens, but it may mess with your numbers...

<comment><USER4> That is one of things we'd like to highlight too, that the review process certainly is FIFO :)

</comment></comment><comment><AUTHOR> Clickable link: <http://appinreview.com/>

</comment><comment><USER4> Although this was our first app submission to the App Store, we could tell how frustrating an experience it can be.

Hoping this little tool and help relieve some of that frustration for us and other developers.</comment>


Wingly, the flight sharing platform - <AUTHOR> https://www.wingly.io

<comment><USER2> Interesting ! Very clear website. I hope this takes off ;-)

But they really need more flight offerings otherwise visitors will loose interest. Surely there are organizations of plane owners that you can contact ? Or the smaller airports where they park (those airports might like the increase in traffic this might cause eventually).

The website opens with French although there is a English page as well. It should check the language header and serve the French version only for French browsers.

<comment><USER3> Let's hope they are working on it

</comment></comment><comment><USER4> I wanna fly!!! Paris to Geneva sounds so cool!</comment>