Only time will tell whether this is a sabbatical or a career change.
All modern web application stacks run as well on Linux as they would on OS X, if not better, so there is no advantage to running OS X and lots of downsides.
You need to run OS X on Apple hardware, and they haven't made a blade server for several years, so you'd be stuck with either the mini or the Mac Pro, either of which is going to be expensive for the computing resources you get. You also can't fit them neatly into an enclosure.
Also, if you ever wanted to move your infrastructure to the cloud you'd need to move to Linux anyway.
I can think of no valid reason to use OS X server to host any kind of web app.
Running it on non-Apple hardware is legally questionable at best (the EULA forbids it, if this part of the EULA is applicable in your country is a question for a lawyer), Apple doesn't do server hardware anymore, it costs money and you don't get support or special software from Apple for server-usage for it, and since nearly nobody runs it as a server OS it probably isn't very high on the priority list to support that usage for other software vendors or open-source project.
A lot of things probably will work well since they are made to run for developer usage, but if you do not absolutely need integration with something apple-specific or just want to reuse an old mac lying around for a hobby project it doesn't give you anything over other OSes as a normal web server.
And not directly what you asked, but a thread that comes to mind is this one, where an unnamed company (presumably Mathworks) built a rack of Macbook Pros for testing purposes.
An entire colocation facility that runs Mac minis. It looks fun.
We have no interest in scaling on OSX and plan to port to linux. It's an interim type of thing.
We've since abandoned this practice as there is no Apple hardware suitable for it. We still run some Mac mini servers for things that do not run on any other OS, but definitely not web sites/apps.
I definitely don't have millions of users, but there are hosting companies that do mac only. You can ask them if they have large clients.
(My needs are a node.js based site on virtualmacosx.
I had written something locally on Mac, and it depended on things that OSX did different than Linux, and decided I didn't have the time or inclination to fix it, so went with VMOSX.)
Database as a service works just like any other managed service today.
That's really only possible if the DBaaS is a "thin wrapper" as you describe.
But, other than that, I think ronreiter is right -- there are DBaaS that have big user bases.
I think the "obvious solution" is just not super easy to implement. If you want ACID compliance as with traditional RDBMSs but in a auto-scaling, distributed setting, it's not going to happen. Early RDMSs were built with a single node in mind, and any database-as-a-service will have to make some compromises. DynamoDB gives you the flexibility of not having to worry about scaling, and even offer strongly consistent reads, but without support for transactions, for example.
IBM Cloudant can scale-out to many servers that are all handled by IBM. I'm sure a lot of other cloud based documentdatabases can do this too.
Regarding why it hasn't become really popular yet organizations are generally very slow to change their data storage solutions. Changing to nosql from a relational database also requires a large rewrite of the system and it is not only upsides of going in this direction (some says that it is almost only downsides). It is for exmaple usually harder to get acid guarantees from a distributed db and it may be harder to create (secondary) indices.
Having them do this at the expense of play (accelerated self-guided learning through social simulation, art and sports), at the expense of physical activity and in an insanely toxic social environment, is plain crazy.
Apprenticeship, where one learns what they need to learn when they need to apply it, and then uses the newly learned skills to achieve own goals beats that hand down. Look up Tobi from shopify and his posts about his learning to write software in Germany's apprenticeship programs.
Convincing kids that they are smart or stupid based on their teacher's opinion on the kids' obedience and ability to regurgitate uninteresting (to them) data is harmful at best. Convincing them that what they are experiencing in school is learning is even more harmful.
Schools are great at efficiently enacting a plan that has little to do with children's needs and little to do with learning.
Like a close friend who attended an elite private school with tiny classes and a lot of self-elected subjects, time allocation and projects said, "when I went to college I thought I was surrounded by idiots. Later I realized these were kids who didn't get a chance to learn good writing, or public speaking, or to plan, schedule and execute on their own nprojects, or to navigate bureaucracy."
I'd say same goes for other important life skills, like financial planning, media preparedness (understanding propaganda and advertising), job hunting, entrepreneurship, art, etc.
To add some context to what I mean, the current system is largely based on the decisions of the Committee of Ten. If you read that short note, you'll notice that it's pretty much applying the lessons of industrialization to education ie. assembly line approach.
The example of the assembly line approach is especially relevant for me because I don't think that it is applicable to humans. Different humans learn at different rates so it doesn't make sense to group them by age. Additionally, teaching everyone the same things, while making things nice and uniform, takes away the biggest motivation for learning - curiosity.
This is completely anecdotal, but the further away I moved from this assembly line education system (from high school to college, from college to self-taught developer) the better grades I got (college) or more money (work) and the more time I spent learning, even things that are unrelated to my main focus because the world is fascinating.
As for an idea on how to fix this, I admit that I don't have a concrete one. I've skimmed the topic and the thing that drew my attention most is the Montessori system system of education. It proposes a few points relevant to what I wrote in the previous paragraph, but also one that I find particularly interesting to developers: "Uninterrupted blocks of work time, ideally three hours".
: https://en.wikipedia.org/wiki/Committee_of_Ten: https://en.wikipedia.org/wiki/Montessori_education
And even still, today's education system might be the best there's ever been . . . most people learn how to read . . .
This doesn't address higher-education, which is a whole 'nother shit-show . . .
1/ Dividing kids in age based groups is very poor. They only learn negative behaviour from each other. Skill based would be more interesting as the younger kids would learn from the older students and the older ones learn some responsibility towards the older students
2/ Scientific research has proven teacher based education to be sub-optimal. You take away the inquisitive nature of the kids. They will take what the adult says as true and fail to look for different ways to reach the same goal.
3/ School just isn't fun. Information is pumped into children which they forget once it has been tested. Let them discover things in a playful way and they will remember it much longer.
4/ Exams really only test how well one can game exams and tests, not how well one understood the matter. Test should be used as a personal measure to check if you understood everything and if you are ready to move on to more complex issues, not as a benchmark compared to others.
And so much more.
Further to that, instead of focusing on minimalism and utility, each subjects goes to depths far beyond of what most kids need to know to make use of. Lo and behold, they're going to forget majority of it in a month. And some subjects have gone completely off the rails, like English, with the main focus on past literature. That's not what natural languages are most used for. Arguments, public speaking, legal, journalism, marketing. These matter day in day out, not what Shakespeare spewed while he was high on an Autumn afternoon. That's fine too but let the kids do it on their own time and focus the efforts in equipping them with critical thinking, etc for when they enter the wild!
Education is about making up what is important for us as a society. If we are to allow million of people to starve and get convince that what we see is just a natural state of affairs, then we have defined education as a system not about us as a society but about you as an individual. Society must speaks out with their pockets: If you are paying low wages to scientist, teachers and doctors, you are educating people about what to do with their lives. Forget about the shiny words, education is a lot about economic, incentives and giving people a decent life. Education can't be build without a framework and a clear purpose. Today all of us know what is the purpose of education: save yourself, stay alive, survive. The rest is just a hollow mud of words, deceitful, vain group of vacuous words.
In this forum virtual reality can be turned into a platform for education. We can use virtual reality to replace opium and get people sideway of our way, that is convert into passive, sleeping minds.
But otherwise, we could transform virtual reality into a platform for action, were people are actively engaged into learning and helping others to create and promote knew ways of learning and discovering what is being a human being in the 21th century.
We all want feedback, learning is about communication for action not for self-oppression. I am for an education for action. Now, go, ruin the idea, sell the product, crook the intention, ban the action and feed the vultures and continue educating for succeed.
It's very possible to perform very well on tests with minimal actual comprehension of the material through memorization. In fact, it's quite possibly easier to memorize solutions than to actually learn to solve them.
Back in the early 1900s, and even through a significant part of the century, teaching was nearly the only place for graduates of top women's colleges, at least until they got married. Upwards of 90% of employed graduates of these schools were teaching. Whether that was a matter of it being the most respectable or the most lucrative thing for women to be doing, the fact is that it had a pretty great talent pool to work with. By the 1980s/90s, when you looked at the top 10% of women in terms of academics, only about 10% of them had any interest in teaching as a profession .
Now, both the money and the respect are lacking. The perception is that any idiot can become a teacher as long as they can make it through their four years of college. Some people will be quick to say that you can't teach for the money. While that's certainly the case in the US right now, and it agrees with the overall notion that it's much better to be in a job you love, it ignores a lot of the problem. Top students, when they pick what area of studies to pursue, are bound to think about the prestige and earning potential of their future careers, though the amounts of those will differ for different people. If you could easily be headed for a job where you'll make upwards of $100k, accepting $40-50k is a lot for some people to swallow. Suppose I think I'd really enjoy teaching, and hopefully even be good at it, but asking me to be unable to retire for ~40 years, versus the 7-10 I can manage otherwise, is a bit much. Even if I'm not doing my ideal job, I can afford some hobbies that will make up for that. I like sailing, skiing, and traveling, and I'd like to get my pilot's license. Teaching isn't going to pay for any of that. So I make my trade-off, reducing by one the pool of potential teachers. And there are a lot of others doing the same thing.
I have many more things I could say, but I should wrap up my rant. I also believe that home life has an enormous influence on school performance, and I think land use patterns in the US increase this effect by reducing community cohesion, and along with it possibility of parents who struggle being assisted by the people around them.
 Somerville College Report, 1987 and 1996. (I've used statistics from Oxford here, but the trends are similarly mirrored for US. I just don't have a resource handy.)
We can't fix education without fixing the rest of society. The system is so complex and inconsistent, we simply can't expect a kid that keeps what makes him good (curiosity, honesty, idealism) to thrive in the real world.
The solution is to preserve curiosity and honesty. These are the only traits that matter.
There is no limit on # of passwords or # of users with the base license and has full Rest API support.
It's git friendly and supports having separate GPG keys for different credentials.
You can either use the free hosted service by passopolis, or host your own.
disclaimer: not affiliated with either of those, but was a happy Mitro user and then switched to Passopolis (and am still very happy to use and know the project lives on).
 https://passopolis.com / https://github.com/WeAreWizards/passopolis-server
 https://www.mitro.co/ certificate expired)
It's not robust and won't handle edge cases gracefully, but I've used it for a few hundred PDFs and they all worked.
The big downside is the slideshare slides are images, so the PDFs aren't searchable - they are just images.
In one of our latest projects we decided on following stack:
Backend/API: PHP, Symfony3, Mysql
We choose this because the following reasons:
The team is already familiar with symfony/phpWe had to integrate with existing stack/business logic in php ( or port parts of it )
We needed a single page app that we could easily port parts of to a mobile app later onWe wanted to decouple our frontend from the backend by doing only api calls so we avoid having backend code responsible for generating html/etc
Real-time component: Node.js, Redis
We needed a component that processes events as they come in, and a lot of them. We decided against PHP so we could lower our memory footprint and also because it is a bit more convenient to deal with state.
This component checks each incoming data packet with a set of rules and reports on violations.
This component gets it's configuration from the backend api and reports back to the api whenever a violation occurs which needs to be logged.
Personally, I would go for Flask just because it's so easy to build up momentum due to the minimal setup required.
My current stack is JavaEE on TomEE.
I'd probably happily sacrifice verified stack compliance for the latest TomEE 7 milestone build as I understand the verification issue is just Oracle being Oracle again, throwing a wrench in the gears just because 'why not'? Or rather to see if they can somehow extort some money from an open source project. </rant>
If it's just you, and a first outing, then a minimal set of whatever you're most familiar with. For me that would be nginx -> wsgi -> flask/bottle or similar -> postgresql, because python. Similar if you're more comfortable with ruby, js, whatever. Build out from there if it becomes worthwhile.
If you're a group, whatever allows the group to make best progress.
Haven't used but wish-list to try next: Docker, GraphQL, and probably try hosting it on google cloud platform
If the use-case fits, even wanna try a Firebase-backend only app as well
Haskell yesod and elm for fun
Database: Postgres and possibly Redis
Frontend: Not much of a front-end person so I avoid all the complicated stuff and stick with Bootstrap. I also tend to prefer coffescript
Hosting: Lambda via Serverless for API, S3 for HTML/assets
API: Node/JS via TypeScript, Postgres RDS, GraphQL
Front end: React
Backend: PHP (Yii2), Mysql, Redis
Frontend: React (if I can't get away with just JQuery), Bootstrap 3
Realtime components: Node.js, Socket.io
I learned the fundamentals of Ruby on Rails with Michael Hartl's tutorial and built an e-commerce application on Heroku from scratch (html/css/js/jquery/postgresql) It featured an admin panel, inventory management, user accounts and a reasonable RSpec test suite. It took me about 3 months of plowing 90hours+/week. I used it as a portfolio application to start looking for jobs. After blasting hundreds of resumes (>600), I got about 20 interviews. None of them worked out except for two unpaid internships which I financially could not accept.
I gave up Rails, but I didn't give up coding, so I asked the internet what was more likely than Rails to land me a job? iOS was probably more niche and more in demand. So I spent a month learning the basics of iOS development with Swift and released 2 apps on the App Store over the following 6 months (build-learn-build-learn cycle), both using Parse, Firebase and a panoply of 3rd party APIs. They were well architected (imo) using fundamental OOP principles, as well as the classic iOS patterns, singleton, observer etc.
This time I sent over 3 thousand resumes over the course of 5 months, all over the world: Canada, USA, Mexico, UK, Australia, Netherlands, Germany, Argentina... you name it.
I got 2 remote pair-programming sessions, which I nailed, I also got about 8 coding assignments, which I completed within hours of receiving the instructions (4 of which never even had the decency to respond or give feedback). All in all response was the same. I even got a couple of absolutely ridiculous contract offers such as building a full fledged real time web and iOS landlord/tenant management system for 2000$, solo.
Without trying to start a pity party, I am now doing manual labor on a curtain assembly line, going door to door after my shifts trying to sell Wordpress websites, which are easiest to setup and sell.
I guess I had to stop coding because I couldn't find a job, because it takes up time I don't have and even though I am passionate about it, passion doesn't pay the bills.
I understand that higher education isn't there to teach you VB or Java but to teach you the principles... but IMO it certainly wouldn't hurt if there was some connection to real life.
I came in as someone who had already coded a while. I was best in class in several subjects IIRC, helped others but felt like I could never have a career in Java.
We were never taught how to work efficiently. Or rather: teachers actively restricted access to sane environments.
Code was supposed to be written in an old unsupported text editor.
For many of us this very smart idea teachers has about teaching things "from ground up" has the nasty side effect of demotivating many of the best students to the point where you consider doing something else.
I never even dared to apply for a Java job and only started after being picked up. I remember telling my first boss the truth: yes, I have been coding since I was a kid and yes I have passed Java in school but I cannot program it. Luckily he gave it a try and with good colleagues Java soon became my personal favourite.
I wrote about this in article a little while ago if you're interested in the full process I went through. Note (I didn't choose the title for this) - http://www.gadgette.com/2016/02/19/how-i-learnt-to-code-in-a...
I am a programmer and I have a lot of patience for that stuff. But I don't why I do, because objectively speaking it's crazy to spend hours ingesting this kind of ultra-specific, non-reuseable information.
1. Learned to code some C# in an attempt to distribute some of my simulations to other computers. Had a great time and managed to get something good enough up and running.
2. Tried to pick up Haskell because I liked some of the ideas, and had a few projects I was interested in trying to do in a functional language. Had a bad time and quit after ~2 weeks. The environment and tools were garbage. I thought the old by-engineers-for-engineers software I used to build research models was user-unfriendly, but I guess that was just because I had never tried to work with the software programmers build for each other.
I worked through ~20% of "Learn Python the Hard Way", then later, the intro CS 101 of Udacity which has a Python intro, as I wanted to be able to do more then vlookups and complex workarounds for Excel sheets.
My new career is in marketing automation, so I did some tutorials online, and bought a SQL book to pull PL/SQL queries for data segmentation. I also picked up HTML/CSS, but don't have any reason to really use Jscript. I can read it, and trouble shoot in some landing page uses, but I don't need it.
Learning to code was always a supplemental goal for career growth, and I find it fun. I was that IRC guy who loved scripting simple tasks like a music player/displayer, k/b wars, etc.
However, when I'm actually diving into learning actual code, I don't enjoy it. I don't think I'm built for it, just as I don't grok statistics, yet my sibling is a actuarial scientist, but he gets confused about things that come naturally to me.
Being in Marketing Automation, its more relevant for me to do "continued" (outside of work) education not in coding, but in platform research (Eloqua, HubSpot, Marketo), more SQL/data management (I am reading "Object Technology: a Manager Guide), and certifications in these platforms.
The primary reason I gave up was that I wasn't willing to accept the amount of effort which needed to be put in to get the level of results that I wanted. I just couldn't comprehend that the skills I wanted to have required years of commitment.
The advice that I'd give would be to understand that this is a huge task. You won't learn everything quickly; even if you're very bright; even if you spend 14 hours a day on it. Those things will help, but they aren't the key.
If you want to be a good programmer you need to love learning. It's not about being clever, it's about being persistent. You constantly need to learn new tools and frameworks, and occasionally new languages. You need to understand the technologies you're interacting with and how they work. And you need to take all those tools, frameworks, languages, and technologies and use them daily.
But mostly you need to invest the time.
Don't give up if you let a big project go because it's too difficult, or don't understand something, or spend two weeks on something you thought would take an hour. Be disappointed, sure. But don't quit.
Keep going. Keep learning. Keep on picking up just a small amount of knowledge or skill each day.
In a year things that now seem complex will be obvious. And that will happen again and again every year that you continue learning. Eventually, your failed projects will turn into completed projects, but it could take years for this to start happening depending on how ambitious the projects were. You can't let that stop you. You just have to keep going despite it.
So keep going. But realize it's a long, slow, life-time commitment to constant learning. It's not easy. Even if you've been good at everything else in life, there's no exception for you. Mastery and skill will only come with significant time and effort. But they will come.
Also learn vim. That sh*t is awesome.
I viewed coding as a means to an end. Learn to code-->start a business-->get investors-->pay someone else to code. I didn't care much about what I was learning, only that what I was learning could potentially fulfill other goals. That, in and of itself, wouldn't necessarily deter someone from learning how to code, only...
I struggled learning through on-line tutorials (Code Academy et al). It's not how I learn. That was unfortunate, seeing that coding community spearheads this type of learning. I realized that if I wanted to make it work, I'd have to register for a class. Then I became scared that maybe the struggles wouldn't persist past on-line and I'd be financially committed to it. I wasn't willing to take that risk.
Codecademy did a good job though and http://www.theodinproject.com/ too.
EDIT: Also, the job prospects did not look too good because of the fierce competition. What motivated me was doing my own apps/sites (lego for grown-ups), or at least work on a startup, but the required resumes were really daunting. Sysadmin just didn't have the rockstar flavour to it (I think it's a fine job, just trying to convey the fact that a certain air of adventure needed to be present to lure me to stick with it- i.e. the same reason 13 year olds learn the electric guitar).
Through out these years it's always been a struggle to learn to code and finish something. I've done some basic problems, some Project Euler, etc. I did countless tutorials, it just doesn't stick for me. I've been through so many languages that I can't even remember them all, name it and there's good chance that I've read a book on it.
It also seems like there is so many tools and programming today is so convoluted and over engineered that I just get overwhelmed. I also don't have anyone to talk about programming, I am just spinning wheels solo and get frustrated when I get stuck.
Right now I am giving my last chance of learning to code. I found out Lisp and eventually Clojure. It seems more straightforward and simple, there are no 'design patterns' to remember and break my head with. I feel like I can slowly build something from bottom up. I have high hopes for Arachne upcoming framework. I hope it will be accessible and I'll be able to make SPAs sites.
But yeah, I feel like I've burned out on this. I just get frustrated with code most of the time when I can't come up with a simple solution.
I progressed from there to medicore competency in PHP, rails, and c++. Then I went to university to study comp Sci...but almost immediately switched to aerospace engineering, and my coding skills plateaued.
By that I mean I can write basic stuff in all sorts of languages, but I'm miles away from writing a compete program or anything user friendly. Most of my code these days revolves around automating various things in the most sensible language. Where sensible often means something the next non-coding engineer to come along can understand.
I guess I stopped because I knew enough to do what I currently need to do. I'm content that, given time, I could learn to be a better coder. But at the same time I avoid jobs in my industry that are suited to decent coders because I know there are more suitable people for the role.
Every so often try to pick up some "hobby coding" but find that I don't really enjoy it like I did as a teenager.
The reason it clicked was because at the time, a colleague offered to mentor me. This helped since he would assign me cases related to my skill level, show me how to ask better questions, and explain how things worked in context to our tech stack.
I tried many of the free options out there but whenever I hit a roadblock I just quit because I had nothing to lose. I paid $30 or so for a swift course and never stopped because I had paid money. It's a tiny amount of money but I felt like I had to see it through since I paid money. I now have 2 apps in the app store, with another on the way this week likely.
I find myself particularly struggling when language walkthroughs get to libraries and code organization. Follow all the paths and dependencies is really tough for me.
Now the good news is that you don't need to use TDD. Tests of any kind do make a difference, even if you have to write them after you've coded up a solution. Tests should be testing the most important parts of your application or the trickiest parts. Tests are there to give you confidence that your code does what you think it does AND to ensure that you don't accidentally cause regressions. If your application wasn't built with testing in mind, use test data or use a BDD tool like codeception.
I don't find TDD to be necessary but I do find tests necessary. It along with automated deployment can increase the quality of your code by an order of magnitude.
I don't particularly enjoy TDD, where you write the tests first. I do enjoy what I call test-oriented development, where code doesn't get merged without tests, and automated testing is how you verify any changes before committing them (though for UI and workflows you should always have an acceptance testing stage). It goes a long way towards making me feel confident in my code; it gives me a structured point in my workflow to consider what the edge and corner cases might be and how to deal with them; and it often helps me catch and verify fixes for subtle (or not so subtle) bugs much sooner and with a lot less effort than click-throughs would.
Edited to add: you say you spend a lot of time mocking databases and such. I usually plan to have a DB available for testing. Django in particular makes this easy by building an empty DB scheme for each test run and running every test in a transaction that gets rolled back so that the DB is in a known state for the next test. Some things you may just want to use instead of mocking, especially if they don't require running an additional process (sockets seem like an example of that to me, depending on what you're doing with them).
For other interfaces (especially third-party web APIs), look for libraries in your language that will let you mock requests, specifying responses. If there isn't one, build one for re-use, use it for all your projects, and release it open-source. That'd be a great way to earn some visibility in your ecosystem.
However, I have written code without it and I frequently find that when I do so, I very quickly regret it. Either I get confused about what precisely I'm doing or I end up having to write tests after-the-fact and it is much harder. The barrier is worth overcoming. How?
1) Find good tutorials and work through them.
A lot of people say that the best way to learn something is just to dive in and build something. I disagree, at least when that thing is new to you. I find it is much better to find a tutorial that guides you through building something the first time. It is worth asking around on twitter or on a relevant subreddit for this. Then, don't just read--actually work through at least a good chunk of it. Once you've done that you have some code you can look back on when you are looking for the basics of how to set up your tests.
2) Don't worry about mocking as much in the beginning.
Also note that TDD doesn't really work if the code is already written because doing fine-grained tests for code that is already written is really hard. It is better to do interface/API tests and put off unit testing until you are willing to refactor the code.
Note also that there are some tasks where your tests are going to be more like infrastructure tests and your changes won't be quite as granular as TDD doctrine dictates. That is something you have to accept when everything is coming together, because that is the realm of integration tests.
There is a tutorial I've written which aims to teach this alongside teaching configuration management, though it is my first tutorial. I would love critiques of the pedagogy and example code. https://amfarrell.com/saltstack-from-scratch/
But at some time, my C64's tape recorder broke. And I couldn't save the programs I wrote. So, programming to me was, waking up in the morning, start writing some program and playing with it, and in the evening when I switched off the power button everything would be gone. But I loved to play with my C64 :)
At those days, sometimes I even wrote very long programs. But I must admit that, when I see those 322 lines, it really frightened me now! It's looks like a million line C or Java codebase to me. I have no intention to refactor that code at all.. But I agree it would be fun.
Recommend you port it to Python, as a command line / console app. Command line would make it simpler to keep the "spirit" of the original.
My suggestion is to use KeePass and store your database in a zero-knowledge, self-hosted cloud with end-to-end encryption (and also secure it with an offline private key).
If setting up that cloud storage sounds like too much trouble, SpiderOak is a good centralized, zero-knowledge service.
As for it being censorship, this event is not properly comparable to the government censorship of speech in China. Read http://www.paulgraham.com/say.html if you haven't. In the US what you can say is restricted through informal, "softer" means like social pressure, which would make it like most places if not for the fact that American cultural institutions are the most powerful in the world; those institutions, in turn, have a complicated relationship with the government. Briefly, American billionaires like Thiel have nothing on the American media or universities in terms of their ability to influence what people think. Government, media and academic opinion form a feedback loop.
There is (thankfully, of course) no Great Firewall of the United States but in practice American thought rarely deviates from the government-approved norms.
The troubling part is that we have someone secretly using money to manipulate a case in which he is not a direct participant.
Wealthy people should not be able to weaponize our legal system.
Thiel funding a lawsuit against a website that specifically wronged him is so mild that it's just not worth getting upset about.
To me the story seems to be that Gawker was wealthy enough to crush libel and slander lawsuits for years. But in the end, there's always a bigger fish.
Assuming the legal system is just, I don't have a slightest problem with whoever funding or managing a lawsuit, revenge-seeking or not.
And comparing an invasion-of-privacy (or libel and slander) lawsuit to opaque state censorship is a huge stretch.
Now he is going to get stung.
2) Use WordPress: just pick a simple, one purpose theme and avoid bloated ones (ie ThemeForest). It requires a LAMP/LEMP stack.
3) Ghost is an alternative blogging platform with minimalistic and usually well designed themes. It runs on Node.js.
4) Pick one of the many static site generators based on the language of your choice. They require no database and only need basic static hosting: https://www.staticgen.com/
I by all means don't think this is 'professional', but I doubt what you want to make would need much more work than I have done.
These days there's resources for everything, webservers which have really good proxying if you want to code in a language other than php or manually writing html, pre-made 'article-writing software' in many languages made for the web.
Tools? All you'd need is notepad, or nano (or, your preferred text editor)! You shouldn't need to run compiled code for the web, in my opinion, as there's no noticeable speed differences.
Googling for specific things in a specific language will probably give you results, e.g. 'nodejs blog' will land you to Hexo, which really neat, customizable, and fast.
 https://avail.pw https://hexo.io/
On the lowest effort end, squarespace is a pretty decent option for getting something that looks nice up and running quickly without needing to deal with server stuff. It works for several colleagues, but has some flexibility limitations.
The next step up would probably be a Wordpress installation either on your own server or the lower-effort hosted solutions from wordpress.com. Personally I can't stand wordpress (it's become immensely bloated and keeping it updated and all your plugins/themes/whatever in sync and playing nicely can be a pain), but it works well for a huge number of people.
After that you're looking at rolling your own custom page on your own server, maybe a simple themeforest template on a shared host. I don't recommend this approach these days unless you're itching to get your hands dirty with some code whenever you want to update something.
I use Dynamic DNS and a lamp(hp) server hosted on a Raspberry Pi.
This cost me a total of $10 a year + trivial Electronics costs.
My site consists of 0 interactive parts. I have no use of a database . It only lists work that I've done, Often linking out to GitHub repositories.
- html theme from themeforest
- amazon s3 for hosting the static files
- linked a domain
- used formspree.io for the contact form
Not much traffic, couple of cents a month. I don't do much updating too. Worked well for me.
You can use a CMS template to make it blog like, lets you do nice formatting no cruft.
Here my use of it (need to do some updating, been a while):http://www.portcommodore.com
Heres a good example page:
Then there is Github pages and some people have created template repositories that you can clone or fork that look rather nice and are easy to post content to if you just learn Markdown which takes five minutes
However if you need an intro page I would suggest wordpress, they have a hosted one too, incase you don't want to deal with server stuff.
p.s My site https://snehesh.me is built on react and nginx
I'm a dev and would doing it if I were not such a cheap bastard.
2) Its not ready yet. Lots of stuff doesnt work, though much does.
3) Its oddly separate from Windows, which makes perfect sense, but the unix is so much less integrated than mac (or obviously linux) systems are.
3a) Not being able to launch windows binaries from Bash makes scripting hybrid stuff hard. I think this will be fixed at some point.
3b) Im not sure if the windows file explorer can see the ubuntu root fs. Could be wrong here.
It seems that once it goes 1.0, it will have some advantages over a VM with shared files, but also a few disadvantages.
Also, if you use the ext2 volume manager to access EXT3 or EXT4 drives, they don't show up in bash at all. I haven't figured out why yet.
I was able to install ZSH after some fiddling with ZSH and compiling a custom version. That was a month or two ago, though. I don't know if that's necessary anymore or if they fixed the issue. But, everytime I run bash.exe I have to switch to ZSH manually. For whatever reason, chsh thinks zsh is an invalid shell.
A bigger issue, for me, is it runs as root by default. I was able to create another user and manually switch over using 'su', but it's an annoyance. I haven't figured out how to automatically start a session as a non-root user using zsh. Actually, scratch that... I just added /bin/zsh to the bottom of my .bashrc file and it works.
Another downside is the linux subsystem has no awareness of the rest of windows and vice versa. I imagine that kind of integration is going to take some time, but I look forward to being able to automate my windows programs with bash!
All the things I need it to do work, though. I use vim and grep and search and all those lovely features that I call my "zsh ide".
So, on the whole... I wouldn't use it as my primary daily driver yet, especially considering you have to sign up for the windows 10 dev updates in order to get it. Every morning when I wake up it's a coin flip whether the machine will work or decide not to render drop down menus (just as an example...).
But, when they finally get it working and release it as standard, it'll be marvelous. Much, much faster and easier than running a VM or Cygwin.
Every Mac since the switch to Intel processors has built in support for dual-booting Windows. If you want to play games that don't run on OS X, boot into Windows and play your game.
I am struggling to understand the concept of compromising your working environment so much, just for the ability to play games without a reboot.
I would imagine the productivity losses in a single hour of working would be more time than is required for two full reboots - into Windows and back to OS X.
One of the most glaring issues is that it's contained in a windows-like terminal and the fonts are broken for non-standard characters.
As for gaming, I have one HD on my machine with Windows, and I boot from it to play.
This has the added bonus of completely separating my "work" environment from my "play" environment.
I remember it all working very nicely with little perceptible difference from working on Linux.
Otherwise it's been pretty awesome, despite some incompatibilities.
And oh, get ConEmu to fix the garbage cmd.exe https://conemu.github.io/
I found it very useful for monitoring - instead of waiting for someone to write e.g. a Nagios script for the thing you want to keep an eye on, you can just write a bash script.
I have yet to have to try the official Microsoft bash. The question is whether it is competitive with Cygwin for these purposes. i.e., does it carry all the other GNU tools with it.
I gave up using Windows when the Windows rot got too bad after about a year and I couldn't be bothered reinstalling. YMMV.
Luckily we don't move a lot in this business. I might type slightly less quickly than most people (though I am actually quite a fast typist, I think it's slowing with age), and I might make more typos (thank goodness for IDE's which help correct things like that!) Ultimately I can code all day without much problem at all. Maybe other engineers are less tired at the end of the day, but who knows? I can only judge how I do based on my own experience.
The one big problem with Parkinson's is that it can have cognitive effects. I have read that it can cause dementia and other issues. This could obviously effect coding.
Anyway, I am glad to answer any questions.
Since those numbers are so low, there is right now a team at the Cleveland Clinic which recruiting for a much larger study (100 people total) that they're calling CYCLE: 40 people with PD will do forced exercise on a motorized stationary bike in the lab, 40 will do voluntary exercise on a normal stationary bike in the lab, and 20 will not be directed to exercise at all in the lab:
This is right now still in the recruiting stage so it probably has a couple years before it yields results; but if your friend can't live in Cleveland for a year, you could try to find another way to keep yourself at the 80-90 RPM levels, whether tandem biking with your friend or else by jury rigging a motor or perhaps even self-discipline.
You're going to be responsible for helping your subordinates get their stuff done and progress their careers and you better be the kind of person who can put others first or you're going to begin losing people, which only makes your life more difficult.
Firing people really does suck, but laying people off is gut wrenching. If it's a surprise to them that they're getting fired for not cutting it, that's a sign you weren't being proactive enough with the feedback (or that they're completely clueless which does happen). For me, when someone isn't cutting it and they're teetering on the edge I have a very blunt conversation letting them know they're on their last chance and exactly what the problems are. Usually by that point it's the 3rd or 4th time we're having the same problem and they're all but out the door, but I've had people miraculously turn it around. If you have any empathy this will be the worst part of your job.
Resourcing if that's something your company does will take up the majority of your time if the company is busy- everyone fights for the 'rockstars' and you'll need to figure out how to match your people with projects that suit their strengths AND interests.
You've got to be putting in the 1:1 time to know where your people are interested in growing their skills out and identifying what their strengths are. You've got to be able to figure out how to put people on projects that might stretch their comfort zone and also be able to support them so that they don't fail and keep an interest.
That said, if you are really considering a management role -- not because it pays better, but mainly because the job excites you and you love the challenge to keep both your engineers and your boss happy -- Michael Lopp's blog  and book "Managing Humans"  are certainly some things which you want to read.
I personally also love Meri Williams' blog, which also contains all her talks on managing geeks. In my personal opinion both are the kind of people you would like to have to run your team(s), and their insights on how to properly manage people are invaluable.
That said, if you also love getting amazing things done and being the guy who clears the path for your guys to shine, it's awesome.
Your subordinates will LOVE having a manager who actually gets what you do. But can you explain their perspective and advocate for them to non-technical managers? You need to do that.
Career paths of these sort are usually only present in large multi-billion corp, not so much in startups.
There may be a path where you can combine your intrinsic motivators (love writing code) with the very real extrinsic motivator of a great salary.
Big Data Engineers are getting $183K > http://www.forbes.com/sites/louiscolumbus/2016/02/10/finding...
The lesson for ageing engineers-- always be on the leading edge of the tech skills demand curve.
Also, learn the art of subtle self-promotion. In other words, share your work with the community. Visibility helps keep you in demand.
So far it is incredibly rewarding. I'm spending less time writing code for projects and more time writing code in group sessions with my team passing on skills. Seeing the team grow and develop is amazing.
I don't know if this approach fits into the traditional management role but if you can make it work, being a multiplying force is tremendously rewarding.
From a monetary perspective I'm doing better than I did so a programmer, but the entrepreneurial path requires a lot of non software related skills and is much higher risk.
Knowing salaries - good
Respect/status/more say in the org - good
Chance to mentor and help your staff - good
Having to field complaints about your staff - not so good
Firing people - not so good
The different skillsets you use - varies I think, some technical people don't like the managerial tasks
And I know how you feel as well because I was there. I thought I was limited down the Software Engineer path. The reason why I stepped into the business side of things is to build my skillsets in case I wanted to start my own company.
As a Manager, what most folks have mentioned is true whether you're an Engineering Manager or a Business Manager - you need to always be on top of things making sure that everything is running smoothly and to address the issues when things aren't smooth. You'll be solving problems related to humans and time (i.e. allocating resources, project planning, budgetary constraints) as opposed to engineering problems.
You'll have to put on your sales person hat to sell ideas on why things can and cannot be done (i.e. why can't we complete XY feature in 2 weeks? Why adding more developers won't speed up the project? Why we need an additional server for development?)
If you're further up the chain in management, you'll have to put on your strategic hat to understand how your department sizes up against the other department. You'll also be the first person the CEO contacts when things don't go right. You'll be expected to weigh in on all things tech related and give recommendations on what the business should and shouldn't do from a tech perspective.
If you're an engineer your need to stay up to date with the technical evolution: coding standards, frameworks, languages & trends.
If you switch into a management role, you need to be strictly organized (accuracy, punctuality, reliability), a good salesman for binding and motivating the project stakeholders AND all the engineering skills mentioned above.
I've switched into management 8 years ago and (even if it does not sound really nice) i need to know everything better than my envolved colleagues to decide if they're on track.
The switch was driven by four reasons -
1. Financial growth and social status.
2. More meaningful impact by picking what was to be developed rather than being a cog in the wheel.
3. Desire to learn new skills. To prove to myself that I could do it if I wanted to.
4. Burn out on software development on the same product and company for 10 years.
Of these - the financial growth has not materialized but all the others have been validated. Searching on glassdoor and other salary sites, I frequently find developers commanding higher salaries than managers.
I've found that as a manager, you are still coding. But you are coding with people and organizations rather than Python. The methods and interfaces aren't well documented. The object structure has evolved through acquisitions and bolt-ons and VPs staking out claims. I rely on the org chart as much as I used to rely on architecture diagrams. The build and release cycles are slow and the lack of daily measurable accomplishments are hard to deal with at first. My predictable schedule and zero inbox days are over. This sounds exciting but on some days the multi-tasking and lack of flow is horrendous. I used to be only able to cook a single dish at a time but now I can do multiple dishes in parallel - one of my learned skills that transferred to the kitchen.To be sure, it gets better. You get better. A wonderful side effect is that my communication skills have vastly improved. My understanding of how organizations work and how to align people and objectives has increased.
Quite frequently, I wonder if i made the right choice. Whether I should go back to being a software developer. Whether the grass was greener back there. The answer is different every month. Sometimes I'm frustrated with organizations and people and other days the difficulty of setting up a functional development environment or debugging a for loop for two hours seems like a thing for crazy people to be doing.
As I muddled my way through my career options at that point - the most useful tool for me was the resonant quote - "Twenty years from now you will be more disappointed by the things that you didn't do than by the ones you did do. So throw off the bowlines. Sail away from the safe harbor. Catch the trade winds in your sails. Explore. Dream. Discover."
That - and I knew I could get back to software development whenever I wanted. In UX terms, switching is a recoverable action.
I really doubt I would have earned what I did as a manager if I didn't love doing the job (and therefore spent a lot of time trying to get better at it).
The way I got started was in helping my manager with some of his tasks (because I was really interested in learning about it). When he left, he recommended me to fill his position.
Simple means both easy to understand APIs, healthy internals and judicious use of abstractions (no overkill).
Producing a complex solution for a complex problem is by my standards mediocre engineering.
When you focus on simplicity everything follows (and your technical skills skyrocket because it requires to be extremely skilled to make things simple).
Clear, clean (simple, compact, readable, etc, while still being correct and complete), elegant, efficient, well-formatted, properly separated and grouped, optimal (no unnecessary or premature optimizations), etc.
If I write code so that other people can use it I strive for coming out with the best API possible (for whatever definition of "best" makes sense for the project) if I write for experiment or fun I just want to get thing done and see if it works so I write in the most fastest way possible, if there is some change that I need to work again with the code I try to write it in the most maintainable way possible.
Simplicity and readability of my code, my tests, and the notes that accompany my code. That way someone (including my future self) can understand the system.
And writing tests first. I've become convinced that there are very very few cases when I can afford the luxury of not insisting on writing a test first.
Most tort lawyers work on contingency, so you usually won't have to pay anything up front, though they will demand 30-50% of any payout you receive.
One of my taxi passengers was going to a Chiropractor. She'd lost her car in a car wreck caused by the other driver. The chiropractor paid her taxi fare, and billed the passenger's attorney for this and their fee. The passenger was previously not a Chiropractic fan, but the urgent care she'd gone to first basically ripped her off by charging lots of money for anti-inflammatory medication (which didn't help at all). She was feeling much better with regular treatments from her new Chiropractor.
(I personally have been to lots of Chiropractors. Some were pretty good, some were mediocre. Eventually I found some manual therapy systems that are more gentle and reliable. As one of the doctors I'd visited said, "all some people need is any kind of touch, which is why they love their massage therapist...")
(I bet Uber's founders were so annoyed when they realized they had to hire people to provide customer service. The transportation company I used to drive for has always had people to take complaints, and to deal with problems.)
Also get health insurance. Not the answer you're looking for but in the US medical costs can ruin your life.
European here. I thought "Obamacare" was supposed to prevent this?
Otherwise, it seems crazy for anyone to take the risk of founding a startup, and not being able to afford insurance.
(I know people that avoid going to the doctor when they should, me included sometimes, but it's nothing to do with money.)
Other option, go to a personal injury attorney (I know but they do exist for a reason). A reputable PI Attorney will help you protect yourself, get seen by a physician faster if you need help there, and will file all the paperwork etc for you. They get paid by going after the insurance, so just expect that, and they will get a response, not the brush off.
Someone from Uber called by phone the next day and were very willing to discuss coverage for any injuries. They asked me to confirm multiple times that I wasn't injured before ending the call.
Not trying to be a shill: I assumed I'd never hear from Uber unless I went after them with a celebrity twitter account or an army of lawyers.
Hopefully it's just an oversight that your incident has fallen through the cracks and you can get ahold of someone soon. I just wanted to point out that there should be human beings reviewing any reports, at least as of a couple months ago.
Not exactly the 'microservices' approach, but similar ideas.
One of the most useful things related to this is to focus on interface design. It's easy to scrap a bad implementation and re-implement the same interface later, it's harder to fix a bad interface that you're using all over the place. Making some implementations pluggable up-front will also make it easier to swap things out later.
Another thing that ended up causing the most pain in the long run was building in too much functionality directly instead of leaving things up to plugins. Plugins can more easily be enabled or disabled to compose specific functionality. The alternative is tons of code and tons of configuration options to handle every little corner case.
As far as lower level tools, the 'coverage' tool integrated with your test suite is a must have.
* No duck typing
* Document all input/output parameters to functions.
* Avoid fancy meta-progamming.
* Try to break it up into smaller pieces with well defined interfaces that are ideally not pythonic. Think about the interfaces as something you'd potentially want other programming languages to be able to talk to.
* Don't use eval/exec or more generally don't pass Python code around.
In general as the scope of a module/unit gets larger you want to stick with simpler stuff. If the module/unit is small, the interface is small, and there are good tests around it, you can do anything you want inside that smaller bit.
[EDIT: These comments are mostly Python specific. On top of that you'd apply what you would in any other language, organize your code properly, consistent style throughout which in Python includes following the relevant standards PEP8, doing code reviews, tests etc. etc.]
We must have different definitions of "all hell from breaking loose", since none of those tools would help me avoid that in C++ at all. Hell has broken loose when you have an unmaintainable ball of mud, which IMO has little to do with what those tools help with.
But for those tools:
Many of them you just don't need in Python due to language differences. You need to make sure all branches of your code are somehow tested, but memory management is easier with (mandatory) reference counting, you don't have pointers that are not valid, and so on.
As for performance profiles, well, since you're thinking of using Python, you already decided IO is your bottleneck and not CPU. The moment you find yourself thinking "I should profile this code and speed it up" is the moment you consider using another language for the job.
Starting from here, unit tests will take you a long way. Tox + pytest + coverage.py is the defactor standard for tests now, and will give you peace of mind when editing your code. Tox can run flake8 as well so it's often done.
After that everything is a luxery. You can use mypy to get static typing, you can make sure to have a very good editor checking stuff for you such as PyCharm or Sublime Text + anaconda. You can use CI with something like Travis or buildbot.
I usually make sure to have a .editorconfig file and a clear style convention to easy team work. And I like to use sphinx to write the doc of the project, which you really, really need to do. This include docstring for modules, classes and functions (with Google style for me), comments, but also some manual rst files.
Last, but not least, experience matters a lot. You learn how to organize stuff in your dir tree. I like to split any file bigger than 500 lignes in Python because it's such an expressive language. Having one module for exceptions. Having proper unicode handling from the start. Etc.
I've also heard that at Google they require assert isinstance for every parameter of every function.
New Relic has very good tools for profiling python code if you're running a service.
They start off with a pretty decent amount of unit tests (84% coverage) and make sure it's visible to developers using:
- Travis  (has to pass on pull requests too before contributions are accepted)
- Coverage 
There's also Code Climate  for some more introspection.
2) `from collections import namedtuple` reinforces 1
3) nice lighweight tests, py.test or nose
4) integration tests so you can actually refactor w/o having to recode 100 unit tests
5) write as little code as possible
But my $.02: Documentation, python code itself is easy to read but if you have a large project, broken into many small code bases for libraries, services and front ends then you need solid documentation. Not only text but also diagrams showing how all the parts work together. Not sure if they're called diagrams in english but it's the stuff you make in MS Visio or Draw.io.
The only way I could manage it was to write tiny functions, so I could literally eyeball the scope and keep all the details in my short term memory. I would not recommend using this language for larger projects.
* Measure test coverage to be aware of what is not tested, but don't just pursue exact coverage % number - doing that leads to many integration tests and a few unit tests. Both kind of tests is important.
* Extract libraries from the main code, to make the main project smaller; write docs and tests for these libraries. Docs are important for these libraries. Try hard to maintain boundaries - a library should have a single purpose, and it shouldn't be tied to the rest of the code. If you find writing docs complicated them maybe the library does too much, or maybe its API is too hard to use. Fix that.
* Don't write all code yourselves, consider using open-source libraries. But don't use open-source libraries if you're not comfortable with contributing to them - there will be issues (like in any code). If the library you're going to use is not an industry standard read its source; if it is "ah, yeah, this is almost how I'd written that" use it, try to find another library or write your own otherwise.
I'd say the trick to handle large Python projects is to resist making them large. Don't be sloppy in code organization, be pedantic about which part "knows" about which part, extract non-specific utilities to libraries. Often projects can be kept under 20-50K lines of code after a few years of development by a small team if a team tries to maintain code quality and moves non-specific features to external libraries.
flake8 and alike linters may help with consistency; it is important, but not the main problems by far. The main problem to fight is non-locality: if one can reason about a piece of code just by looking at it, without checking lots of other components, the overall project size doesn't matter much.
Unfortunately, it is very hard and brittle.
You definitely need rigorous testing to keep it all in one place, but I would steer away from Python for a large project.
Also take a look at mypy or some other sort of typing to see if it can aid in a large project. 
* run unit tests and integration tests in an automated manner for every commit. (a.k.a use tox, jenkins or somesuch...).
* Depending on the software you are creating deploy a chaos monkey kinda approach for disaster/HA testing.
* Read up on good Python practices :
Am I wrong?
One can only grow if faced with challenges. I learned a lot about myself and life.
I was too timid to rais rates on old clients, so I gave new clients a higher rate. After a year or so, about 20% of our customers were paying the higher rate and that gave me the courage to up the rate on the old clients.
Nobody cared - a few customers told me it was about time I raised my rates.
1) Quitting ZenPayroll. Ended up leaving what are now millions of dollars of (paper money and unsellable) shares on the table, at a time when the company was clearly taking off. Now building a values-focused, mission driven company the right way and loving every minute of it.
2) Quitting LivingSocial after 11 months when I realized that they weren't what they sold me on. The pitch was building back-office tools for SMBs, but in the end they never did the right thing for SMBs if it wasn't also in their interest.
3) Dropping out of college as a philosophy major, believing I could learn to program. Joined LivingSocial as an aspiring engineer, which turned out to be a great place to start. Great exposure to the Ruby community, experience with hard things (scale, caching, business problems creeping into the product.)
As you may notice, my biggest fear is regretting wasted time. While I tried to change each one of those places to be what I knew they could be, until you start your own company you must (rightfully) defer to what others decide is "right". I've realized I have an incredibly high bar for making difficult decisions, which isn't realistic to "manage up."
At the time I was living in Houston, where I didn't have much of a network, so I packed up my stuff and moved back to San Antonio. I attended college in San Antonio and at least had some contacts there, mostly revolving around the coworking center Geekdom.
No job but I had enough savings to float myself for a few months.
A friend of mine from there put me in touch with a startup he had invested inthey were still in Techstars and he knew they needed an engineer. I contracted with them for a bit and joined up full time after they graduated and raised a seed round. Arguably they risk was theirs as their first engineering hire was a fresh dev who'd never had a full time programming job. They moved to Boulder after the program and six months later I followed.
Now I'm at Twitter, because I quit a job I hated and bet that my contacts would pay off.
I picked express, react (v0.9) and sequelize. Webpack for bundling (it was undocumented that time)It was my first experience with backend JS and react. For service I used docker and fig (now it's docker-compose)
Of course, I failed this project after 1.5 years of dev (it was pretty huge, but this technical debt destroyed all that I have coded). Then I created this project from scratch on Magento (it was just online shop) in about 4 months.
What I learned? A BUNCH of things related to TDD (system tests, unit tests, mocking), JS ES6, program architecture at overall, SQL (things like assotiations, migrations, SQL performance optimizing), about caching technique... This list is pretty huge, I learned in that time 80% of all I know!
That was about positive moments. Now about negative. I experienced impostor syndrome (by the way, I'm feeling it right now and this feeling is not leaving me). Also I experienced burnout 3 times (apathy, lack of appetite, insomnia). This thing was really destroying....
I'm happy I've failed this project! I learned a lot of things. Now I really become full-stack JS engineer. I've got the power :)
And First of all, I started to value my time, my energy and my mental and physical health. Now I place this things in first place, they really matter! I'm 21 years old, don't take me like I'm sick or something (Like all people on 20s, I'm filled with energy). I just found the price... the price of myself.
Also started a small advertising agency in 2013 and grew that to $50k monthly revenue. After 3 years of doing that, I realized that scaling an ad agency was really hard. There is a lot of over-head, high churn and I didn't enjoy it.
I am now back to developing a mobile app SaaS service and an educational SaaS service.
To sum it up - my biggest risk that paid off was starting my own business.
I did this when I moved to London (from Scotland) and then to Seattle and then the the Bay area.
It was worth it every time but it's scary too, especially when there was no backup plan - if things didn't work out in London, I had no ability to get back to Scotland.
I hustled my ass off, worked super manual jobs during the day, focused on networking and skill building at night. Landed a job in tech and continued to study anything and everything I could. Few years later, in a upper management role. Best decision ever. I'm learning so much, getting to work on bleeding edge tech, and getting compensated well. That said, a couple sentences explaining this path doesn't due justice to how hard it was to get where I'm at. I didn't get lucky and this path isn't for everyone.
Spent last year in school designing something akin to Casetext, then they came out of Summer '13 batch while I was studying for the bar. Decided to cheer them on rather than continue to build my application since I just recently began self-teaching JS (they're currently like 85/90% parity with my idea, was closer to 60% when they first came out - go Casetext!)
Joined up with AmeriCorps for 12k/year providing free legal assistance to homeless/disabled vets (VA bens, discharge upgrades, clearing criminal records). Had applied to legislature job paying 60k. Fell in love with my vet work. Legislature job calls me up 4 months later into my AmeriCorps service to interview (I'm 90% sure I had this in the bag based on the previous summer's final evaluation).
Turned down interview, stuck it out with low pay for another 6 months and then got hired on for (still lower than Legislature) salaried position.
1.5 years later - for my org, I'm in charge of all vet work for the whole state (4th largest vet population in US), I supervise the veteran law program at a top 15 lawschool. I'm "unofficially" in charge of whole state bar association of vet law attorneys (we just recently formed as an entity with 100+ members).
I get to work my own hours, I get to choose my own cases. I didn't even know this was an area of the law I could make a career out of - not a vet myself.
Job satisfaction > pay (plus it'll come in due time)
I, too, quit a cushy and stable engineering job with the Government to join a marketing agency. Then I quit that a year later, with nothing else lined up.
My only plan was to "consult," but I didn't know exactly what I would consult on and how I would find clients.
I went through all of my savings and maxed out a credit card (0% introductory rate) when, in the nick of time, things started falling into place.
It's three years later now. I'm very happy with my career and the lifestyle I'm able to afford thanks to my income, which is 2x greater than my Gov't and agency salaries combined.
Wasn't easy, though. I wrote about this at greater length here: http://www.gkogan.co/blog/how-i-learned-to-get-consulting-le...
The first week after quiting I just spent time questioning my decision. But next couple of weeks I spent time with myself and gained a better perspective about life and career.
Its been 2.5 months now since I quit. I have saved enough to keep me floating. And now I am preparing to get into Amazon. Let's see if I nail it.
It was a rightful decision that I took. One thing I did learn is "How not to run a startup".
Changed my life in all aspects. Today I am in yet another country and enjoying my career so much more.
I interviewed there on a Friday. The manager comes in last and tells me everyone liked me and he was going to offer me a role as a mid-level Solaris admin. I'd skip over the whole route of help desk->jr admin route and go right into a mid-level role. The only catch was he told me the company was filing for chapter 11 bankruptcy on Monday.
I took the job hoping I could last there a year. I somehow made it through 2 rounds of layoffs and was there a year where I moved to another small company as like the whole IT shop that took me to the next level.
I had no plan. I had no replacement job lined up. I had little in savings. I struggled for the next year. I fucked up and lost a lot. But I forcibly put myself on a path to do something I loved, and invest the time necessary be good at it. This opened up a world in which I don't hate my work or life, rarely have a bad day, and typically work no more than half the year.
It was the best decision I ever made, and I've never been happier.
2 months later I got hired by a AAA firm.
But we are here critize, not to praise.
My ongoing gripe with the DK2 was the Occulus Drivers and API constantly breaking. Every couple of months they would release a new driver that was incompatible with previous drivers, and games programmed to work with previous drivers. This meant that you often were faced with having to upgrade to play a new game and forever losing access to your favorite old games. I finally just quit upgrading -and thus quit buying new VR games.
It also used to sometimes require an hour of work to get a game to run correctly.
Occulus has fixed both of those with the Cv1 release. So why am I waiting for a Vive, rather than buying a CV1?
Occulus really, really wants to own VR. You can't launch a game without an Internet connection. The TOS allows Occulus to record what you look at and do in VR. I find both really creepy.
The Vive is room scale, gives you hands, and has better optics. So I'm just waiting.
- Owned by Facebook, I don't want to lose even more personal data than I already have to them
- They made several promises that they did not hold (Stock availability for preordern, price range, controllers)
- The controllers aren't even available yet and kinda make the oculus useless (Vive has great controllers)
- Vive has better room-scale tracking of movement
- Requires at least a 970 (same as for the Vive) and I'm not really wanting to buy a new one since my 780 still holds damn well otherwise
- Already mentioned: Windows only
However my biggest issue with the Oculus is that they want to "VR-lock" games specifically for the Oculus and I think that's the shittiest move they could've pulled. This alone is a no-go for me.
If both would support Linux, I'd go for the HTC Vive because it includes proper VR controllers and roomscale and I prefer Valves approach to exclusive titles.
My current "VR plan" is to get the PS4 VR when it is available and to bridge the time with the Google Daydream VR SDK..
When I went to find my first internship I only just got it almost right before the deadlines, I was devastated, but something eventually came along and internships afterwards went much smoother than that. I know a lot of friends with similar stories.
So don't take this personally, all I can suggest is keep applying to jobs, get people to practice interviews with you, keep working on questions, and if you have the time working on some personal projects. Normal school projects aren't good enough, when interviewers ask you about those projects they would've heard of the same project 50 times already, work on something that you're passionate about and that you can solve some interesting challenges with, think about what the projects mean to you and how do they help you learn. They should be something that's interesting to talk about during interviews.
Also I'm not sure if this is a good advice or not, but imo don't set the expectation too high for your first internship, it may be a no-name company that you've never heard or cared for and not Google Facebook or whatever you desired, but you will still be able to learn a lot, and getting your foot in the door is important.
I worked at a "no-name" firm in my first internship, but looking back it probably taught me the most out of all of my internships. And things only got better for me since there.
The first route would probably make more sense (there aren't that many people like you I guess), but it would require you to move (the market for such skills is small) - maybe even to another continent.
If, on the other hand, you want to be a "generic" SE (that can work anywhere in the world and maybe has a shot at remote work), you need to pick a specialty and prove employers that you can deliver within it. That's worth more (although less fun) than cute CS projects you've listed. Just select area/technology/stack you like and start learning about it and eventually build something non-entirely-trivial with it. If you want to see what's hot, take a look at monthly "Who's hiring" threads posted here - they give a good overview of what tech is currently in demand and/or trending up.
By the end of my MSc study in US, It was extremely difficult for me to get an internship. My professor was inclined to try to push me further into looking for opportunities but it was dry (a recession). Internships give you, as others mentioned, a foot in the door - but also launches your career at the 'level' that would potentially mean a certain level of income in X years. And not to mention the mentorship you will get.
What I did was, through my local contacts, get a a semi-paid gig for building an e-commerce/catalogue for a vendor. I took that opportunity to learn, on my own, as much as I can. I networked heavily. I went to all tech events I could. I built it in Java/Struts-1/MySQL (the stack of the day) in 3 months.
I then moved back to my country (maintaining my launch app for 2 years). I had a job opportunity waiting.
I never said no to work, network opportunities or pet projects. Anything that I came across I'd try to learn/build. I was married with 1 kid (with a very supportive wife).
Forward 15 years - I'm a Canadian software consultant. Reasonable pay. Lots of challenges especially with the economy. Success? Perhaps.
Email in my profile if you want to discuss further.
Your MSc will be a +.
It could be due to your age that you didn't get the internships since they are looking for young college kids.
I would focus on what type of programming you want to do.
What experience do you have.
I do full stack development/web applications.
So I'd recommend you learn HTML, CSS, js, jQuery, PHP or ruby, then Laravel or Rails. It's a long process but you have to start with the basics and work your way up.
Think about what type of development/programming you want to do and follow that path.
Once you are a skilled Rails or Laravel developer finding jobs should be relatively easy and pay well.
It's the in between transition time that is the trick. It's lots of learning/hard work. But I enjoy programming and web app development so it never feels like work (at least not yet).
Personal projects are a big plus. Think of an app that would make your life easier and build it.
Sign up for a github account, find some open source projects to contribute to.
Are you still working as a ME?
As a ME you have some good project management/engineering experience that you can apply to doing/running/managing software projects.
To find work you're going to need to network so meet developers in your area network with businesses that could potentially hire you. My best clients/leveling up has came through knowing someone who needed a developer.
Good luck with the transition.
Don't give up on internship, they really matter.You have an age handicap (you'll be lying to yourself if you don't admit it), however you can overcome it by being better then what your classmates are offering.
You bring something very unique to the table, experience and knowledge, try leveraging what your learned as a mechanical engineer into the interview, show them that you have a unique and broad perspective (especially if you're going to intern in an IT department in a company that is relevant to that process)
Since you're a mechanical engineer, you probably have a network there. Couldn't you ask one of them for an internship? Anything from an internship at a CNC builder to a custom system to organize drawings to a plugin for a CAD tool?
Are personal projects enough to get you an entry level coding job? Yes especially if you can talk about some coding you did as a Mech-E.