You don't say what your side project is, but you have to ask your self whether you need liability protection, that is what are the chances someone is going to sue you for damages. If you feel you need liability protection, then you should form an entity. I recommend an LLC in most cases. It is a pass-through entity for taxes which means you pay taxes on your individual return (though it still must file a business tax return). Also buy insurance.
The other reason is ease of administration. A legal entity will have some form of controlling document. In an LLC, it is the Operating Agreement. This spells out the rights and duties of the principals in the business. It also allows for common ownership of the business assets. As principals come and go, the LLC continues on. Finally, if you get big and you bring on investors, they will want to see a legal entity for their protection.
The drawbacks of forming an LLC are the time and effort of drafting and filing all the proper incorporating documents, paying the filing fees (in California $800 per year), and the extra tax forms.
This is a complicated topic and I have given a high level view. There are lots of resources on the internet and in bookstores on this topic. Nolo.com would be a good place to start.
No I operate as a sole proprietor.
> 2. Do you pay quarterly taxes?
Nope, I pay the penalty since my income and ability to shelter it vary from year to year. The penalty is something like 3% on the total taxes you owe. Not too bad given the flexibility holding your money provides. Maybe I can load up a i401K that year or need to save for some big purchase which is more valuable then just giving the IRS the money.
> 3. Do you list it as other, unreported income on your returns?
I file a Schedule C
I do it all using TaxAct. Super easy and cheap. Helped me to understand taxes as well.
I have to say that Atlas might be one of the easiest, and least expensive, ways to deal with the incorporation and the rest.
I haven't incorporated any of them, I see that as an unnecessary hassle.
I'm in England, and (as far as I'm aware) quarterly taxes aren't a thing here. Until this year the income was negligible enough not to bother paying taxes, but this year I've been keeping track of finances with ledger and I intend to pay taxes as "self-employed" for the first time at the end of this tax year.
And to make sure I'm going in the right direction (not going to run out of money) I add up my net worth, split by category (bank account, peer-to-peer lending, stocks and shares, Bitcoin) at the start of every month and keep track of it in a big text file.
 currently focusing on SMS Privacy, read my Indie Hackers interview at https://www.indiehackers.com/businesses/sms-privacy
While the annual cost of $800 minimum tax plus maybe another $500 in administrative fees (accountants, legal, etc.) is real money spent, you can make it back in tax deductions and potential liability. If you have a structure in place (another entity that is not you personally), it is much easier to deduct expenses (less red flags) IF you make an attempt to actually generate income -- the government cannot stop you from being a bad business person :)
If you are in a 50% tax bracket, this could easily be offset by $3000 in expenses such as hosting fees, domain names, costco membership, cell phone, even your car lease. If you are renting, you can possibly deduct some portion (~20%) of your rent (do not do this if you own a house). Get a separate bank account + debit card, a separate credit card (maybe a business one with rewards) and pay everything using that entity. You will end up making "owner contribution" from your personal bank account to your business account every month.
The extra wrinkle if you have multiple projects is that you can further separate your different projects into "DBA"s (Doing Business As) which costs an extra $100/yr (County Clerk Recorder, Publish in Magazine, separate bank account, credit card, domain name) 100% owned by your LLC (or S-Corp). If you shut down a DBA, it will cost maybe another $50. You will need a DBA to open a bank account under that name.
While this may look like overkill, this keeps everything clean and if your side project does take off, you will have some history with the business.
On a day-to-day basis, what I usually end up doing is setting aside a day to deal with all these entities. Most bills are on each "company" credit card and I call all the credit card companies to align the closing date. For example, all my credit cards close around the 22nd or 23rd of every month. On the 12th of every month, I pull up each account and pay them all using one screen of online billpay if you have all your business accounts tied together using your SSN.
Note: I have other companies that are their own entity as they are generating income & have other partners. The setup here is specifically just for my side projects.
Lawyer and Accountant. Budget about $10k/yr
Start as LLC then move to C-Corp as it grows and takes investment money. Accountant files quarterly federal and state taxes. My wages are taken out on W2.
When smaller the project is an LLC. Accountant still files paper but under $100k only annual. Just take the money out as distribution.
Tax implications from either route. Encourage you to find a trusted advisor on those matters
The $800/year is indeed painful but it's cost of doing business (and maintaining continuity).
I've got an LLC for basic liability protection.
PayPal is my business system. All sales come in through PP, and I use the PP credit card for my purchases. All documents are electronic. At tax time, I download the entire year's transactions into a spreadsheet, add things up, and enter the totals into a Schedule C.
Rather than filing quarterly taxes, I've simply bumped up the amount of withholding from my regular day job.
My state LLC
>Do you pay quarterly taxes?
Absolutely, mail a check with the coupon based on income earned.
>Do you list it as other, unreported income on your returns?
Schedule C and income from business, you pay Self-Employment Tax, SEPs are nice to push off the income to retirement and see a tax benefit if it's supplementary.
I also carry worker's comp and liability insurance, pricey, annoying to setup and deal with but worth it from my perspective.
If you're making more than a few grand (net) then you might consider having your LLC taxed as a corporation and enjoy the 15% tax treatment. If Trump gets his way, corporate taxes might finally be reduced and you'll get even more favorable tax treatment.
However, if your intent is to enjoy the income but you expect a narrow net income or loss (lots of expenses can be attributed to your business), then stick with a single-member, disregarded entity, LLC.
If you have a small side project with low risk then I recommend sole proprietor for sure.
In any case, soon as you start generating income you need to track income/expenses, register your business, register for HST and setup a separate bank account. I think TD here charges $25/mo just for that privilege.
So yeah, sometimes a fun side project loses its excitement when your stuck doing paperwork and start adding up the expenses, it's not worth it.
EDIT: specifically, in the index entry for "business structures" and the chapter on taxes. I also bought a few "personal MBA" books, & on marketing etc, but this seemed clearly the best one to start with; those others I think I'll come back to, later.
As for taxes, the penalties are not particularly punitive if you screw up and you have years to manage the situation before anything critical happens. In particular, if you go one year without making quarterly tax payments you will probably walk away with no penality.
If not, how would I go about the income from my side projects?
For me Xamarin Native was slow and rigid. I highly doubt I could make 'innovative' apps with Xamarin. Maybe it is okay for people who want simple things like a "to-do app" or somethign that fetches list of images and displays it.
I wanted more and found no solution for things I needed, so I gave up and started xcode (swift + some objective c).
And let me be clear here, if I had spent same amonut of time on xcode as xamarin I would have been iOS dev master :)
Things just works much better. You can do anything you imagine with Xcode and swift. With Xamarin its more like find whatever library is out there and try to create something by combining these. Too many bugs.
This is no sly dig on Xamarin or Microsoft as I use alot of MS products myself. I have also tried phonegap, react native etc. and Xamarin is the best when it comes to cross platform without a question, but none of these can match true native coding (xcode swift/objc)
* Xcode = iOS bugs + UIKit bugs
* Xamarin = iOS bugs + UIKit bugs + different runtime, language, memory model abstractions + .NET bugs + P/Invoke bugs & overheads + GC inter-op bugs & overheads + C# bugs + slow followup of platform updates
* Xamarin Forms = iOS bugs + UIKit bugs + different runtime, language, memory model abstractions + .NET bugs + P/Invoke bugs & overheads + GC inter-op bugs & overheads + C# bugs + slow followup of platform updates + extra UI abstraction layers + lack of fine level controls & features
The real problem is that I can write a native iOS app in a fraction of the time it took to write a Xamarin app. Swift has improved iOS development speed so much I'm not convinced we need cross platform app engines (excluding games).
As for Android, yeah, native Android sucks. Activities and fragments are the worst idea anyone has ever had and no one agrees on best practices. But even with cross platform high levels of abstraction like Unity3D you still need to understand them. So, my current advice is to suck it up and write it native twice. Pick your favorite OS, start with that, and then port the logic.
However, in my experience, both Xamarin Studio and the build system are buggy as hell. Random or inexplicable build errors, things that break during updates, incompatibilities with official Android support libraries... I find myself doing 'clean project and rebuild' to fix random errors, or switching between alpha, beta and 'stable' channels all the time depending on which one does not have the bugs that I'm running in to.
Xamarin.Forms is simply a disaster. Because it aims to unify the apis for the UIs for various platforms it boils down to only the most common denominator of those platforms. And then makes it worse. Not only is it buggy, it is also very slow and incredibly limited. In our office we're keeping a list of all of Xamarin's silliness we encounter, here is just one of those:
"Clicking a Button changes its text alignment from center to left-aligned; it requires writing a custom Renderer to solve this."
I'd love to hear from someone using Visual Studio if their experience is more positive, but my advise is: please stay away from Xamarin.Forms and Xamarin Studio as much as possible.
I've tried Cordova/Ionic, Xamarin, Dropbox Djinni, and native iOS development. C++ is the closest I've got the a performant cross-platform solution, even though it go it's own quirks.
The problem with Xamarin is it'll always play second fiddle to quick moving targets of Android and iOS toolchains. In my case the Reactive Extensions support was utterly broken, and Visual Studio kept crashing on MvvmCross, Android SDK updates would make things hell, and I would waste at least 8 hours a week to fight the toolchain. The promise of cross-platform doesn't deliver much as you're trying to tweak your MVVM solution to Android/iOSs whims and fancies, which leave you with a fragile common logic.
If you want to write a TODO list of simple CRUD app, it might work, but for professional iOS/Android development, Xamarin is not enough. Xamarin doesn't free you from learning ViewController lifecycle etc and platform specific implementation details. So you're stuck on a foreign platform, with extra overload of learning C#/F# along with Android/iOS platform overhead.
My Advice: Learn Swift and Kotlin, and do native development. Cross-Platform is a illusion, and the road is paved with dead and failed projects.
Xamarin Forms is not Xamarin, it is a DSL. You do not need to use it. At its core Xamarin is c# with pinvoke to the underlying native platform implementation. You'll still need that platform knowledge but now you can share the core business logic between platforms.
To get maximum code share you'll need a MVVM framework such as ReactiveUI which is based on the Reactive Extensions and modeled on functional reactive principals check out https://github.com/reactiveui/ReactiveUI/releases/tag/7.0.0 or http://reactiveui.net
The team is made up of a few React core devs and some ex-FB folks. They actually helped organize the last official React conf. The scope of what can be built using Exponent is expanding rapidly. And you can build apps that are virtually indistinguishable from Swift/Java apps.
If you want an example, I'd encourage you to download the Android version of this app: https://li.st/
In no particular order:
Stay the hell away from Xam.Forms, unless it's improved drastically in the last 6 months. Though I also think the whole idea is misguided.
For Android, go with Xamarin or Kotlin. I would take C# over Kotlin because of the maturity of the language, the tooling around the language, and the ecosystem. Either way, having a powerful modern language will be a godsend.
Concurrency on Android is much easier to deal with in Xamarin than with native. This extends to things like complex orchestration of animations.
You will do backflips trying to get startup-time down. But once your app is in memory performance is basically native-level.
Xamarin gives you some nice framework-level things that native Android doesn't. A good API for sqlite and http. Proper data-binding. MvvmCross and ReactiveUI are light-years ahead of anything that is available in native-land.
Xamarin builds are faster and more reliable than Gradle.
Xamarin introduces its own layer of bugs and glitches. You've added another slice of Swiss cheese to the stack.
Xamarin plugin for Visual Studio is crash/glitch city. Xamarin Studio is tolerable at best. Either way, your tooling will be faster but less feature-rich than Android Studio.
Every time you want to use an existing third party library, you will go through this process: Has anyone done an official binding for it? If yes, use awkward Java syntax in C#. If no, try to find an unofficial binding. If not found, try to bind on your own - 50% chance it just works, 50% chance you fiddle for half the day and then fail. If it's the latter, try to decide if you want to do a code-level port, or abandon your idea. Code-level ports are possible nearly line-by-line, it's slow brainless work.
Also I would like to recommend to focus more on Xamarin.Forms, it's using more modern approach. XAML (it's a xml-derived language) is actually quite good for writing UI part. Add there some MVVM framework and you'd love it.
Edit: fixed spelling
One thing I love is that because it maps so closely to native Android development, you don't need to look specifically for Xamarin.Android tutorials/SO Answers/blog posts etc to learn how to do something.
Most of the time, information targeted towards native Android development will apply to Xamarin.Android also, and you can basically map example Java code to C# because they use the same classes/namespaces.
I'm going to be getting into Xamarin.IOS soon, hopefully the experience is as nice.
My main complaints are:
* It's full of bugs
* The build system is unreliable and mysteriously breaks, which generally takes a full day to fix
* Basic functionality such as merging resource dictionaries (which are stylesheets, kinda) is missing
* No graphical UI designer or preview, so every layout change requires a recompile and deploy before you can see it
* Apps feel sluggish and crash at runtime without specific error messages
* It makes VS crash all the time. I'm not a regular VS user so I'm not sure if VS:CE2015 is a POS or if Xamarin is.
In the beginning, i thought about making a hybrid app, because it could save me time on the long run, but starting to developing with Cordova and EmberJS or even Xamarin was frustrating.
Xamarin on VS has some bugs that would only go away if i restarted the IDE in order for things to work. Also, i'm concerning about being dependant to a third party framework.Can they keep up to speed with Google,Apple and MS?
Another valid concern is app size distribution that seems to be considerably higher with cordova and Xamarin.
Since i started on Android, using Android Studio made my life a lot easier and i'm progressing daily and enjoying it, something that was a PITA with other tools.
In my experience i would say that it will be more time consuming (expensive) to develop a single solution for each platform as well as giving support, but the tooling is a lot better, also you can give users a better experience because you end up developing native apps for each platform that can take better advantage of it's ecosystem.
I'll find out in the future if i'm right or wrong.
With that said, I've made a number of apps in it, and it works well enough, but the more abstractions, the more problems, and you want to do anything outside of simple UI apps, you are likely going to have to learn how the native methods work anyway.
Xamarin wins if you need something for Enterprise. A lot of entry fields, validation, integrations with SSO, Sharepoint, other rest API. If you use MVVM well, it will lead to ~75% of code reuse between iOS and Android. Even more with XamarinForms. No complex effects, no complex animations, just enterprise.
Native wins if you want to make it more beautiful for end-users and you need to have a lot of customization. For example, customize map, pins and callout views. You will hate everything if you do it in Xamarin. No code reuse here
In general, Xamarin has very great chance to be #1 choise when you choose platform for Enterprise development.
One nice thing about it is that all the methods/classes are named almost the same thing as native android. If you want to know how to do something, you can find the android solution and just change a few small things.
So my vote would be to not do Xamarin and to choose a different cross platform development environment. Cross platform is the key. If you do choose Xamarin, I would spend some time and do a little bit of training before jumping in. It's not like the ease of building windows applications in VS.
However, as others have pointed out, Xamarin Forms is a bit of let down.
In my experience, if you try to create custom designed UI (which is quite common in the native apps), then you find that Xamarin Forms is very limited. To overcome this limitation you need to write something called as a custom renderer for each OS you want to support. So it doesn't really save you much time.
Xamarin has something called as Xamarin Labs project on Github: https://github.com/XLabs/Xamarin-Forms-Labs But it's progress has been very slow.
If you have a business data collection / reporting app, where how things look is not very important, Xamarin can save a lot of time while creating cross-platform apps.
However, I wouldn't recommend Xamarin Forms for B2C apps.
Obviously I think it's worth it, I learned it well enough to teach others. We have a bunch of free Self Paced Learning modules and videos at Xam University, as well as obviously the paid stuff that pays my salary ;-)
There is a ton of investment and effort from a small team, remember, we've only been with a "big company" a few months, so the improvements come at a blistering start-up pace. If you haven't seen it in a couple years, you should really check back.
If you are going to develop "all platforms" or even just iOS and Android, it is _certainly_ worth a long look. Access to every API you get access to in their native languages and the ability to avoid that language "context switching" pain. Plus, some amount of shared code (varies wildly, 25% - 75% depending on how heavily your app is just about custom UI and animations ).
Because we use the same APIs (except when we have better ones), you can leverage the same documentation and StackOverflow posts when you need to (yes with a little language translation), but you often don't need to because Xamarin has a _lot_ of great documentation as well.
And, as has been mentioned, "Xamarin Forms" does not equal "Xamarin". Although it is a valid choice for developing in Xamarin, it is only one option. Here is a super shallow comparison:
Xamarin Forms: Super fast for super simple UI's and interactions with common elements. It is highly opinionated on what it should do and look like on all platforms. Customization is do-able but starts to increase the complexity of the app quickly to the point where the below would have been a better choice.
"Xamarin" aka "Xamarin.iOS and Xamarin.Android": Use essentially the same development patterns as Native Android and iOS developers and use the same API's (plus .NET library, and many .NET 3rd party libraries). You get code sharing (as noted, amount varies considerably), ability to "think in one language (often including your server, which might also be c#), and access to some additional libraries (because we support both the Native libraries _and_ the .NET ecosystem).
Hope this helps :)
Oh, and a quick plug. Xamarin University is live classes taught by real, very experienced developers who can actually help you learn and understand, so we are, you know, worth asking questions of. Also, we'll be doing a free presentation all day on November 18th as part of Visual Studio Connect, so check us out there and see what you think of Xamarin _and_ Xamarin University!
Microsoft's strategy with bringing a phone to market appears to have failed so they're going to have to take the next best thing which is owning the development tools. I expect the outlook for the software to be extremely bright and if you plan to be a professional mobile developer I strongly suggest learning it.
Of course, this does not excuse you from learning how to develop for iOS and Android natively, but it is a great addition to your toolkit as a developer. It's also another box to tick for the recruiter or hiring manager.
Then I had a .dll that I could use in my Xamarin project. The Xamarin project was razor thin and I only used C# to connect my XIBs or Storyboard (I forgot what I used, but it was in Interface Builder) to the existing .dll calls and a specific type of hardware scanner.
The hardest part was getting that scanner to work, which would be not so easy for me even in Objective-C. But I basically had to create an Objective-C wrapper wrapped in some kind of C# wrapper. It wasn't easy but it was doable.
The hardest part was getting everything signed correctly, since I was using all kinds of layers you usually wouldn't use in "just software" project.
The overall experience was really good despite that the native editor for macOS wasn't that spectacular. I did the meat of my programming in Visual Studio and Visual Studio is a really great tool. Another part was done in Interface Builder which is a great tool in my opinion.
A friend uses it a lot for a cross-platform app written in Xamarin Forms. The thing with Forms is that unless you keep it simple you will run into Xamarin bugs, iOS specific bugs or Android specific bugs in your layouts and that can be challenging sometimes.
I would say that if you would make the UI in native code or storyboards and it still seems like an attractive idea to use Xamarin, use Xamarin. Don't use Forms.
The downside to this is that making a UI seems to even out your gained time--it's extremely messy and even complicated. Code that's valid in C# produces vague underwater bugs in Java code, which makes you keep hacking around until you find a working solution.
Not to mention the docs: some parts of the documentation are completely outdated to the point of not even compiling on an older version of Xamarin. For example, the tutorials on using Google Maps in your Xamarin.Droid application are way out of date, ignoring the fact that the "Google Play Services" component has split off into thirty-or-so components. Some of the most used API's are not documented at all, simply having a "To be added" description.
All in all I find much potential in Xamarin, and I really want to love it, but it's a messy nightmare to use, and it only makes me want to use Java and Swift separately for apps.
Overall I've been very happy. Code re-use hasn't been stellar, but good enough to repay the investment. We have re-use not only between apps, but also between mobile apps, Windows desktop apps, and our application backends. I also feel I'm more productive than if I had so swap between Java/Swift/ObjC/Andorid Studio/Xcode.
Stability has improved a lot in the last year. Paid-for support was pretty good (esp. guys like @jonpryor), but the self-serve forums can be a bit hat-and-miss. I never had any killer bugs (but then I never used Xamarin.Forms...)
Overall: 85% happy with Xamarin.
With both Xamarin and React Native there was a honeymoon period where everything seemed so easy and great. But at some point I always hit a problem where there was limited documentation, or unsupported features, and that really hurt my productivity and motivation.
The learning curve for Swift/ObjC always seemed much higher, with a lot more upfront investment required before I could make anything resembling a functional app. The iOS layout system in particular was an obstacle, as well as managing the tooling and dev environments.
If I had a free 6 months, I would just learn full native, but keep an eye on React Native. The dev experience in React Native is unparalleled, and it seems easy to drop down to native code (assuming you know it). Also the ability to easily contribute back to the community with NPM and react-native "link", makes me hopeful limitations will quickly be erased.
As a day to day user, I quite dislike it. But rewriting our business code was not an option.
Purely by coincidence, I have four blog posts on this out this week. The first one (on React Native and Xamarin) is here: https://unop.uk/cross-platform-native-mobile-app-development...
I must say that, having its own quirks and nuisances (specially in Xamarin Studio, which was pretty buggy until version 6.x), it does the job pretty well.
In fact, when we wrote our iOS and Android clients, Xamarin was still pretty immature. But if we had to rewrite them today, it would be one our of first options, right after using the native frameworks (which ensures the best results, but drastically increases the costs).
Had huge pain in full screen mode dynamically for all the devices.
Calendar with colors forced me to create a new custom control from 0.
To be stable with the controls if you make a tab control in one version should be the same in other versions also, not reinvent and change the wheel.
Easy and clear documentation. Forums all with lots of no one cares why it works int works on my machine stuff.
To new technology and has to get mature and stable. If you are not in the same versions of Xamarin in mac and windows it just not works properly.
Proper error message. I am getting an error like There were deployment errors. Continue. (Not run in administrative mode the vs 2015, closing the emulator or it was opened by other vs before, or you closed the emulator before finished the deploy)There are lots of errors like "aapt exited with code 1" that means there is some bad character in image or in files like -.... or files starts with number.
Also sometimes out of memory exception when loading images larger then 1mb or in android 4.2 larger than 300kb, even going lover to 100kb having problems in 4.2 android.
Proper editor for Xamarin.Forms is a must have if you want to develop. You can't see the design what you are doing with vs 2015.
Also designer is crashing all the time if i open multiple times and make some adjustments.
It has not been an easy road. After 2 years, I'm finally beginning to reap the benefits. The simple problem is this: this is another layer over the existing layers and it's very hard to get it right, especially if the underlying layers suck.
Just because you've learnt Xamarin Forms doesn't mean you can choose not to learn the underlying native platforms. You can skip over most of the details, but something will always come back to bite you, and then you have to go figure it out. Xamarin Forms works on top of Xamarin Android, that works on top of Android SDK and Android Tooling, which works on top of the JDK, which works on top of the OS you're developing on. So many places for something to go wrong, and usually presents itself in the form of a cryptic error at the top. Developing for iOS is considerably easier.
So there's still a fair amount of expertise to develop if you're completely new to mobile development. Take it for what it is -- an abstraction, and as with any abstraction, any concrete manifestation will have its issues, and you must be ready to roll up your sleeves to figure it out. And it does get keep getting better with every subsequent release.
But it does eventually help -- we have to get the complex bit right once, and then it simply works. Don't approach this like you would approach an Android app -- make sure you understand UI design best practices -- especially reactive design and data binding.
So if you're writing a one-time app, and you just want to target Android/iOS, and you don't care how you've done it, no it doesn't make too much sense.
But if you're trying to make a long-term bet, in this awful fragmented device-oriented world, (and having to write the same app twice goes against the very nature of your existence), well that's my bet, I will be cautiously optimistic. If you're on .NET, it's a no-brainer -- there are simply too many other benefits to ignore, and philosophically very true.
The architecture itself (Forms, Xamarin.Android, Xamarin.iOS, Custom Renderers, Platform Effects, Bindings to access native libraries) is theoretically flawless (or very close to it), a work of art -- and I'm a sucker for theory, no matter the real world pain.
Xamarin is nothing more than a C# wrapper around the native iOS and Android APIs. Everything you're familiar with (UIViewController, UIView, UITextField, UIButton, etc) remains the same. The main benefit (other than using C#) is that all non-UI code can be shared across platforms (iOS, Android, Windows, server, etc).
Xamarin.Forms is built on top of Xamarin and lets you reuse the same code for UI as well (using their own abstraction that's similar to WPF/UWP). I would only recommend this for relatively simple apps as you lose some control over platform specific details.
1. If you don't use Xamarin and you don't have a team in-house that uses C#, don't bother. You'll be better off doing native development on iOS and Android platforms.
2. Your app won't be as pretty, and it won't adhere to platform native UI conventions as well if you use Xamarin.
3. Xamarin does a better job of it than most but it will still be lagging in access to the latest features.
4. BUT, if you are doing a vertical market app that wants to be cross-platform AND you have C# coders you can apply to that task, Xamarin is the best choice.
There are a lot of places where choosing Xamarin makes a lot of sense. And the people who created Xamarin are excellent. And now that Xamarin is owned by MS, it won't die because it is hard to make money as a cross-platform startup. But as with every other cross-platform tool for non-game apps I've seen, it isn't the best choice in green-field situations.
Recommended workflow:0. Never ever use Xamarin.Forms other than quick prototyping. If you develop applications with other cross-platform frameworks, you already know all of them sucks and Xamarin.Forms is not an exception.
1. Create PCL / Shared project for your business logic (also your view models if you're using MVVM architecture). Believe me most of your application is platform independent (except the view layer). Your api communication, storage operations all handled here. See 3rd article to how to make storage/network platform independent.
2. Create native projects for each platform (iOS, Android, Windows) implement native views here (use xcode, android studio if you need visual designer). This part should be exactly the same as your swift/java code. For iOS you're just implementing an ApplicationDelegate class and UIViewControllers as same as your swift code. Same for Android part, nothing special to xamarin just implement your activity classes. At this level you have the full power of your native platform with one exception 3rd party native libraries. It's possible to use (yes i used some swift/java libraries for youtube player) them but really hard to integrate to your project, that part has to be improved and better documented.
3. Your shared code base need native features, for example storage implementations are totally different for each platform, or changing views (navigation) will be implemented differently for each platform. Since shared code base shouldn't know anything about native platform. You should abstract these functionalities with interfaces. For example create a storage interface with methods like saving/reading/creating files. Another example might be network communication. Abstract it as an interface on your PCL and implement this interface in your native project with full control of your platform. Your shared code base only knows how to use that interface. And then each of your native projects should implement these interfaces. At this point dependency injection may help to register implementations easily. Actually that part is what makes you share your business logic. Writing idiomatic cocoa navigation code is much better than using any cross platform implementations, you have full control but in the same time your shared code base using them without knowing anything about the platform.
In the free version you app expires after 24 hours AND it has to be below a certain size, I dont remember maybe 2 MB or something.
To make something you have to cough up a lot of money, and the sad part is this information is incredibly hard to find, you only stumble upon it when you download GBs of files.
Indirectly, a lot of good things have happened to me because of HN as well. Things change very quickly in tech space. Yesterday's anti-patterns are today's best practises and best practises of today will become tomorrow's anti-patterns. I owe a lot to HN which keeps me updated with ever changing tech ecosystem. Being a full-stack developer, I've to keep up with both frontend and backend changes happening everyday. Without HN, I'd not have found out lots of things for sure.
Link: https://spark.laravel.com/P.S I'm not related to Laravel or Spark in any way.
But as the other comment states, B tends to be more exciting, and allows for deeper social connections more frequently. Sure, millions of people might know java and you can say, "Hey I know java too!" But I doubt the conversation will go any further than that. However, if you have experience with a less popular language and meet (or are interviewed by) someone that also knows that language, it will create a much deeper connection.
All in all, do both if you can. If you have to choose one or the other, learn something new and become a part of a smaller community and watch it rise or fall.
But if you want to look at it from a purely economic standpoint, the factors you mentioned interact in a complex way. Another one to consider is the salary curve for a language over years of experience. Not every language has the same pay. I would also consider the number of entry-level jobs over the total number of jobs.
I have an article exploring all these factors here if you're interested. Enjoy!
If you're going to focus on a specific language, make sure you're applying it to a problem where it makes sense.
That may not be a language. That may be a programming style (functional? reactive?). It may be a library or a framework. It may be a platform (Android?). It may be a "language" that we don't think of as a language (SQL?).
My current answer is Android (not that I'm making much progress on it...)
Credit where due: I got my version of the question from my wife. She's asked it a couple of times over my career.
First, as you point out, less competition.
Second, these languages are usually a little younger, and there is a chance to be part of a nice community from the beginning
Third, learning an "exotic" language is sometimes a great asset on a resume even if you interview for a position involving a different technology. It shows intellectual curiosity.
1) Autoplaying videos, especially ads.
2) Pop-ups / overlays.
3) Loading lots of extra elements causing text to jump around.
Especially true if I'm just browsing around and click on something that looks interesting, the above will take that thing from "this might be worth 30 seconds" to "not worth it".
Why kill that little dopamine boost someone just got from clicking on a link to your site? If you're wondering why your bounce rate is so high... though maybe these dark patterns bring in enough ad revenue that it's worth it. I don't see how 3 helps that, though, just lazy coding. Or maybe other people are more tolerant and it doesn't really affect the bounce rate.
Some websites have legitimate use for autoplaying media. Some users (believe it or not) actually _like_ their videos autoplaying when they scroll through their Facebook feed or whatever media site they visit. Are their usecases and desires not legitimate?
Your argument is in the line of "I don't like going to Starbucks, so legislators should get together and ban Starbucks stores for everyone". Even if you have a legitimate reason for not liking Starbucks, the solution is for you to just stop going there. If you don't like websites that use autoplaying media, then stop visiting them. Or, like some others in this thread suggested, install some plugin or other software that makes sites behave the way you want to.
A call for browser vendors to implement some opt-in setting that does what you want would be much more realistic suggestion. (As some other comments pointed out, for some browsers this setting already exists)
additionally the dom.audiochannel.mutedByDefault and media.default_volume settings may also be useful if you want slightly different behavior.
If you want a more blunt tool you can also use content blockers to block media content until you opt into it for a particular site.
> I know there are plugins than can somewhat do this, but no solutions are universal or great.
How so? There are about a dozen FF addons covering different use-cases like muting inactive tabs or all tabs but a designated one. If none of them meet your particular expectations that might also indicate that everyone wants something different and it is difficult for browser vendors to cover all expectations. Maybe you should modify an existing addon instead to do what you want.
So far I have not had a bad autoplay problem on iOS. However a growing problem is obnoxious pop up ads that are difficult to escape.
Overall more of my Internet usage is shifting to apps because the Web is just too annoying. Years ago the Web was like a friendly, boisterous marketplace in a safe town. Now it's like the street in "Casablanca" where I must constantly guard against someone picking my pocket. It's not worth using except for a few sites I trust.
Google in particular had better watch out. With Web hostility their search is not as useful. One reaction of theirs has been to pack more information directly into their search result.
Overriding autoplay can lead to a confusing user experience -- play/pause synchronization issue with embedded YouTube videos: https://bugzilla.mozilla.org/show_bug.cgi?id=1217438
The Disable HTML5 Autoplay extension is often suggested for Chrome, and it has 112,213 users, but it's far from perfect: https://chrome.google.com/webstore/detail/disable-html5-auto...
So, in fact, while e.g. Firefox has a mute button for each tab, I also wish it had an individual mute button for each <video> and <embed> element.
In the past 12 months or so, I am really finding my web browsing experience hitting new shitty lows. Pretty hard to see the content you want these days behind that clutter of Outbrain ads, pop up newsletter subs, auto playing videos and the like...
* voluntary customer feedback was universally negative * bounce rate decreased substantially (around 40%) * total interactions with the page increased almost 3x (clicks on significant UX elements such as like/subscibe/additional video plays) * interactions for those using some form of adblock stayed the same (presumably these people also had an autoplay off plugin)
*We did eventually kill autoplay, but only so we could have a consistent experience between YouTube and non YouTube videos (YouTube took efforts to stop counting autoplayed videos for advertising purposes).
What site does this? You can't (auto)play media on iOS without direct user action for exactly the reason you specified.
iOS 10 changed this slightly to allow silent or muted videos to autoplay when visible on the screen https://webkit.org/blog/6784/new-video-policies-for-ios/
Complex software control of multimedia and the whole browser experience gives me the ability to develop new ways of interacting with computers.
I hated Flash. I either avoided installing it or used a Flash blocker. So I always managed to avoid the auto-playing problem when the Internet primarily used Flash for everything annoying.
Now that Flash is about dead and everything is HTML5 now, neither of these techniques work any more to avoid auto-playing.
All websites should be allowed to play sounds any time they want to. Without it, webapps can not reasonably compete the native apps.
I am a developer of web games and being able to play the sound from the beginning, without any interaction from the user, is one of the most essential parts of the game experience.
If you visit a website which unexpectedly plays a sound, you should stop visiting it / downvote it / ask the authors to stop doing it. When you are surprised by the sound, the problem is not in browsers, the problem is in authors of webpages / webapps.
The data issue can be addressed by only having videos play automatically when the user is on a wifi connection. This is the default for mobile devices already, so it's arguably already solved for most users.
The "convenience" issue is something that I strongly suspect is actually something that people think one way but act another - lots of users claim to hate auto-playing videos but then they watch them a lot. Facebook's video engagement statistics are hard to argue with - a well designed video that works without sound (eg something from Buzzfeed) gets a tremendous number of shares, likes and click through engagements.
I strongly suspect that turning off auto-playing video, even by default, would actually make the web worse for the majority of people. For those who prefer them not to autoplay, browser vendors do provide that, but the functionality is usually buried in the equivalent of chrome://flags somewhere.
Or who knows, people might start animating images on canvas or something. Allowing auto play in some conditions seems to be lesser of two evils according to me..
Luckily, there's a setting if you can be bothered - and luckily, for many marketing departments around the world many can't...
"Look, how many views our videos have on FB"...
There's no way to stop autoplay if we allow free, programmatic access to videos (without blocking js too, which I use noscript for).
I had the same problem with the 'loop' attribute. I wanted videos to not loop. I found that some sites loop videos without using the 'loop' attribute. I would disable 'loop' on the <video>, but the <video> would be replaced by a new autoplaying <video> when the original video ended.
This is about the point that I gave up on my extension.
For Flash, change the Flash Plugin setting to Ask to Activate. For HTML5, switch `media.autoplay.enabled` preference `about:config` to `false`.
Or try out FlashStopper  to stop both HTML5 and Flash.
Audio: MUST be muted be default. There's nothing that I hate more than opening something in a new tab for later, and a few seconds later, having to track down there that damn noise is coming from.
Always, always, mute tabs be default!
I find that pages that have sound more annoying than video, but isn't a major problem for me as I have headphones plugged in permanently.
I think I would prefer such a feature request as a user option, like a permission request. This is how popup windows, full screen, taking control of the cursor behaves.
I do worry about the data usage on mobile though with autoplaying videos. Even pausing them doesn't stop it from fetching more in the buffer.
I suspect there may be some valid use cases for autoplaying (such as background looping videos, YouTube, etc), particularly when run in some type of kiosk mode on a TV. It's another example of where some spoil the experience and the behaviour of the web ends up getting locked down to stop them.
I think it is best to avoid shitty websites. My short list: Facebook, and TV network websites and their affiliates. There are lots of websites that do the right thing.
Here's Tampermonkey: https://chrome.google.com/webstore/detail/tampermonkey/dhdgf...
Now with everything rolled into the browser, the problem has gotten much worse.
If websites are abusing it, simply stop visiting them, or install an ad/content blocker. What maybe browser makers could introduce is a "switch" to disable autoplay and audio, and manually enable it per tab. But this feature should be not active by default.
Also, we should be complaining with the ISPs and Carriers about their data caps, not at sites for using data
I would suggest at least making it opt-in through the browser-popup. However that's another annoyance - the number of sites I now visit which ask to send me notifications.
A common scenario in my house: The spouse or I muttering obscenities over the autoplay ads, along with a comment of, "Use your powers for good, dammit! For good!"
I find these intrusive. So much so that I occasionally browse with the computer muted - especially if the source of entertaining sound is coming from the spouse's computer or if I'm looking at cooking sites. Most times, I'm just wanting text.
- YouTube- video usages (webrtc)- some apps for people with disabilities...
You may ask for an option of disabling it by default (which will make some apps not working) but not impose your choice and "insult" developers choices that have a far better pov than you. :/
So a browser setting would work but not disable for all
So somebody who would like to trick the system (e.g. advertisers) could just make e.g. a menu item behave the same way as a play button.
This summer in Greece we had to pay about 500$ f.... penalty for over using our 3G internet access (we just forgot a laptop & brower open for a night).
2. If you use Chrome, use the option that stops plug-ins autoloading (search for plugins in the Settings search-box)
3. If you use Firefox, remove or simply don't install Flash. For HTML5 you should look for controls that stop autoplaying.
For example, GIFV is a format that uses auto-playing videos to replace the GIF, and by doing so cuts down on Internet bandwidth usage. I'd suggest that's a legitimate use for auto-playing videos.
I only really get annoyed with auto-playing videos when I hear the sound from them, so perhaps the fix should be targeted in this area. It may cause problems for things like YouTube playlists, so I don't think the fix is as simple as 'mute them all by default', but whatever the fix is should rely on some form of user control.
autoplay video, please register, and messing with history would be lovely.
I guess it's because there's no good way to populate the selector without visiting the link target.
I filed this bug myself July 2015, though I believe others have existed for years.
In the meantime, I've taken to blocking hosts and/or domains which are used to serve autoplay media. A small list generates exceptionally high mileage.
I implement this on the router via DDWRT, which protects the entire LAN. You can also add this to your own /etc/hosts file(s) on individual machines, or go further and have a local DNS server be authoritative for these services.
The block is intentionally global, and encouraged, as media providers themselves will find that they cannot reach anyone, anywhere so long as autoplay is a default.
Again: the Internet and Web are ultimately a user-determines-policy system. And if servers say "fuck you" loudly enough to users, then users can say "fuck you" back. And win.
DD-WRT instructions: https://www.dd-wrt.com/wiki/index.php/Ad_blocking
Worst thing is that many of these video ads can not be caught by Adblock Plus...
Sadly, pop-ups and auto-play videos lead to more profits, at least perceived/short term. No amount of whining by us will change a board meeting at a medium-large company result. "We need to do X that will piss off Y customers but result in Z more profits." Companies always choose profits.
I'm on board with getting these things changed but appealing to big corporations because "it sucks" is never going to amount to "but it makes us more money." We need a different strategy.
Step 2. ?
Step 3. Profit
Might help a bit.
I think your general premise (that management is becoming less relevant) is true, but you're approaching the problem incorrectly.
If I had your goalset, I would cram hard on EdX, OpenCourseware, etc. You need a good first principles education starting with Algorithms, Data structures, etc. I'd also start to learn how to do SWE interviews, which are a whole other skill set.
One last note: even if you do all of the above, the best way to ensure you're working with cool technologies is to start your own company. I work for a major SF tech company, and our ML team is two orders of magnitude smaller than our monetization team. At the end of the day, companies exist to make money and a lot of the stuff you've highlighted is currently speculative/nascent. There's just not going to be many jobs until these technologies prove their financial value.
Most don't feel like they're building lasting career skills, as agism persists in the industry and most people work on web applications to satisfy enterprise project business specification and project managers. During lunch, I hear conversations about the future of technology and the type of technology that we can work on if we only quit to start or work for a cool start up (e.g., Tesla, SpaceX). The consensus is that there is a tremendous opportunity for these emerging technology area's while other disciplines such as closing JIRA tickets will become marginalized. So I'd advise you to stay away from the enterprise coding bootcamps and only apply for the specialized tech bootcamp that emphasizes on these emerging technologies. The few that come to the mind are, creating new cryptocurrency payment models (for Paypal), writing self-driving cars hardware/software (for Tesla) and harnessing deep/learning AI (for Google DeepMind).
The really interesting stuff usually requires deeper knowledge and skills. For problems worth solving, 15 years experience as a CRUD developer is no better than 15 years experience as a project manager. Making this career change won't necessarily help you gain the skills you want.
The analogy is you wouldn't necessarily take the Olive Garden line cook training class if you wanted to be a French chef. Sure, it won't hurt to learn how to use a knife and it might be a decent Step 0, but it won't get you much of the way towards your goal.
You should really consider a more in-depth CS education, whether that's through a traditional university or something like a Coursera / Udacity nano degree in your areas of interest.
As a practical matter, it might be better to stay employed while you pursue that. But that's up to you. Plan on spending some significant time learning (1-2 years at least) before you can do what you want, not just a few weeks.
You're very smart to consider getting into something like deep learning. The opportunities will be good over the next 10 years like you said - but only for those who are really good at it. It's a very technical field that requires lots of continuing learning. The competition for the best jobs is high. Don't get into coding unless you are very excited about it and willing to invest in learning it for the rest of your life.
If you are excited about coding and willing to put years of learning into it, go for it! But otherwise you could take the impressive skills you already have and find a way to reinvent yourself and apply them in the deep learning industry without becoming the actual coder yourself.
Not because the opportunities you see aren't there; they are. Not because management isn't losing its lustre in tech companies; it is. But because coding is hard.
I have a great software education (top school, top program), I've had tremendous opportunities to learn from the best and build amazing things from scratch, and I've been coding professionally for 20 years next year. I'm only just now starting to really "get it".
Having a top-3 MBA (I assume you mean Wharton) puts you pretty advanced on the product/management track, one it will take a decade to catch up with as a developer. Embrace that, dive in, enjoy it.
Here's an alternative suggestion: you don't need to code to understand crypto/blockchains/AI/etc. Those are complicated and sparsely understood, and they are math. Knowing what you can do with them and how to apply them in products is much more rare than being able to implement the algorithms. Why not focus on the theory beyond the code?
Calculate the opportunity cost of doing this in dollars. That cost is REAL.
People seem to think opportunity cost is an abstract concept. It isn't. Your retirement and your personal situation will be less $Oppurtunity cost.
Other false assumptions I see in your thinking:
1. Underestimating the difference in competition in engineering versus PM
2. Large error in the number of years of low beginner status in programming
3. Your personality as a PM puts you at a disadvantage when trying to get technical buy in from other engineers
Investigate other paths:
1. Study on the side.
(If you can't do this for 6 months, you won't be able to sustain it full time either.)
2. After Work 1-on-1 face to face engineering coaching
Use the money you make now to have a full time tutor who sits right next to you (I.e. they only have 1 student and thats you and you sit side by side and code) after work. I think this is a much cheaper and much more effective way to learn that isn't available even at bootcamps. You keep your optionality but you also learn more/faster than at a bootcamp.
(Ping me - I'll do it for $150/hour. :)
You're crazy to do this. I've been (largely) a developer for years, and I struggle to get excited about client work now. It's amazing to be able to MVP something myself, or throw up a project over the weekend, but that's kind of it. Kids are younger and hungrier than me. Having experience is fantastic and certainly helps with day-rate, but I just don't have the time or the energy to keep on top of everything anymore. Now it's time for me to transition to other things.
In your position - keep the job. But invest time outside of that to learn to code. Build fun things. Experiment, learn, grow. Having an idea of what can be done, how it can be done and the time it takes will make you 10 times more valuable in your roll and moving forwards. You will be better positioned to talk to clients and talk to developers.
If or when the time comes that you want to run your own business you will be in a better position to recruit and to muck in yourself.
But for now, spend your spare time learning, and save as much money as you can to take a chance when and if you're ready.
That said, good luck with whatever you choose. Right or wrong, you can only learn from your choices :-)
If you can, take a sabbatical. If you can't and live in an ethical gray zone, go to a psychologist and get disability time off of work. Depression and some other mental maladies are treated as disabilities, at least in the state of CA.
Otherwise, find time outside of work. I assume you are able to teach yourself if you graduated from a top 3 school. Teach yourself to code. There's more than enough resources on the web that show how to go from 0 to capable engineer. Keep in touch with devs from work. Hang out in dev chat rooms/forums on IRC, discord, slack, or MOOC forums.
Coding bootcamps and online resources don't teach you truly how to code. The ultra basics they teach. Only actually coding, failing, refactoring, repeat teaches you how to code.
As you learn more, you should keep in touch with those devs, and you can ask them for feedback on the projects you work on (clearly, the onus is on you to not abuse their time, but most people like to help someone who is hardworking, enthusiastic and respectful). Then, by the time you've developed your skills to the point you could take an entry level developer position, you will also have a bunch of developers in the company who know you, know how hard you've been working, and will often be willing to pass on knowledge of openings, and put in a good word for you in the hiring process.Also, don't ignore the possibility of joining a startup once you have sufficient technical skills, a growing startup is exactly the kind of place that would greatly benefit from someone who understands team and project management and can deliver good code. They will hire you for the technical skills, not the PM skills, but that doesn't take away their value.Email me if you'd like to discuss further, and best of luck!
My 2c is that if you dont have any dev skills right now then work night and day in your own time to get it. Choose a language, any one will do because you need to learn the fundamentals soundly. Do not be swayed by the tech-du-jour or you will never finish anything nor learn anything in depth. tschwimmer advice is sound. However know your learning style first - i got more out of 3 months messing with C on Arduino then i ever got from a textbook because i like learning stuff with sleeves rolled up and the coffee strong.
And lastly, follow your heart. npostolovski did it. It is far more important to enjoy what you do than much anything else (practical considerations of food and housing aside). Happy and comfortable is a whole lot better than miserable and wealthy.
Disclaimer: Im a PM, have an MBA, and dabble in C# at work, Python/C on home projects.Experience: Im a much better software PM because i can also code/hack some of my own ideas.Have been co-founder of a corporate restructuring company and my ability to code meant i could get the data and calculations needs to make turnaround decisions while others just drowned in their spreadsheets.Im now 53 and learning new things - currently IPC and mesh networks(home) and cost accounting(work).
If you want to become a much better PM and have the tools to start building apps on your own, then yes DO IT! Right now the economy is great, if in 3mo you are back on the job market saying "I'm an awesome PM and I did a coding bootcamp to increase my understanding of the products I manage so I can be an even better collaborator" you will just have increased your value significantly. Probably you could just go back to your old job with a promotion.
I decided to quit my last job and study full time to become a developer. Not through a bootcamp, but through cheap or free resources online. I chose freecodecamp.com to go for now.
I did an Ask HN too and I did not receive much support either from the HN crowd. I don't know if people here think being a developer is not a good career path, or they are tired of wannabes and impostors, or they consider a developer career is just for a few selected ones; but I was expecting much more support here for people wanting to learn to code.
My answer to your question: I think you should go for it. Just consider very carefully if a bootcamp is the best way. But if you have the cash reserve to use, I think might be a good first step. After that, keep searching for knowledge in other places. And follow with laser focus the exact field that you consider interesting.
If in one year you regret this decision, it is not too late to reverse the career change and go back with your great resume as a PM, with more added value by your experience learning to code. Go for it, it is not a path of no return and it will be a valuable experience either way.
Edit: Let me try a more helpful response (though I did intend to make a point there). You seem very focused on what you have: a good salary, a top 3 education, a job at a top 3 company. Things you expect should make you happy, basically, but you aren't, and this is confusing, and it's always scary to give it up if you haven't figured out why those things don't make you happy. But IMO, if that interpretation is correct, it's more important to attempt to find things that do make you happy rather than dwell too much on why the things you have, which are often equated with success in our culture, are not doing it.
Most bootcamps that I'm aware of are for training web developers, with a few going into mobile app development. That will give you some basic coding skill but is probably not going to get you very far in the direction you want to go.
You'd most likely be better off seeking an online CS degree.
I quit my job went into a bootcamp and have been a software developer for a year plus. I've been pretty happy with the decision. My reasons were completely different though and were more about understanding what I was good at and passionate about.
I think I can help. Ask me anything.
I've made the transition from developer to PM over the last 7 years and it's enabled me to work on progressively larger projects and to set direction.
Being a PM is about making sure the right thing is built at the right time.
Admittedly my technical skills have gone stale and to do any of the really interesting technical things would require 6-12 months of intensive learning if I were to do it on my own. This is with undergrad degrees in Comp Sci and Physics too.
So I decided to hack the problem and join a startup in SF thats doing novel hard tech !(business process automation, ecommerce, apps, small marketplaces etc). Here in Sydney they're few and far between.
I'm pretty excited to be working with them, its an opportunity to work and learn with a smart tight team.
So advice to you would be to is find a smaller business unit in your current company where you are closer to the coal face or go join a 100 person company working on a hard problem. Usually they'll have a team of 5 PM's supporting a tech team of 30.
I would say, a PM has to understand the user needs, and drive the product.The former has got two parts1. Understanding the user needs which the user can articulate2. Understanding the user needs which the users cannot articulate.
I have had the opportunity to work with some of the best coders. Though I greatly admired their intellectual capability, I was not a big fan of their ability to think from customer's shoes. I have figured out that "Common sense is not so common". Now, having an MBA does not guarantee common sense, but if you think that, you can communicate effectively with your users, understand their needs, empathise with them, and can comfortably put yourself in their shoes, your are definitely adding value as a PM on Point No 1
Understanding the user needs which the users cannot articulate - This is where innovation begins. Now, if you are a PM without the ability to code, you may be at a slight disadvantage here. The ability to code, or perhaps the understanding of the fundamentals, would help you to structure your thoughts. It gives you a clear picture on what is possible and what is not possible at the present, from where, you can start to innovate.
To me, Quitting the job appears certainly crazy.
Even as a former PM, PM's at your company will try to exert power over you if you are a dev. They will be backed up by executive management, board members, investors, the media who all have an interest in maintaining this outdated view of the programmer who takes the specifications and simply types in the code. Why not fire PM's and just hire PM's that code? PM's don't like that, executives (who don't code) don't like that, even the janitor doesn't like that. Nobody likes that except for devs and devs have no power in companies because of self reinforcing old school ideas about job roles.
You will learn none of these things at a coding bootcamp. If you are really interested in going deeper, check out Georgia Tech OMSCS - you can do it while you are holding your current job (employer may even pay for it for you if yr lucky) and more importantly the courses are relevant to what you state actually interests you about future of tech.http://www.omscs.gatech.edu/current-courses
I have a feeling tremendous opportunity will be available over the next 10 years to software developers while other disciplines such as management become less and less important.
I disagree, solid managers and leaders will always be important. Perhaps you are focusing on the negative, rote aspects of yr job too much?
Like "I don't feel like I am building tangible skills as a PM, it is more about project management and coordinating." Perhaps you are learning many tangible skills (just not ones you prefer). Also, "I have a feeling tremendous opportunity will be available over the next 10 years to software developers while other disciplines such as management become less and less important." That could be true, but maybe it won't be.
My 2 cents
They either come very natural to you, hence why you think they're easy, or you're not good at your job and oblivious about it or you have a very junior position and someone else makes the difficult decissions.
Either way, I would love to be a PM with an interesting product, not to mention being in a top 3 tech company. The money must be really good and the feeling of fully conceiving and creating a product has no equal. Coding it is fine and feels good too, but steering the ship is where it's at.
Even if you go back to PM, the ability to code will help you communicate with engineers and identify the right solution for a given problem, enabling you to transcend the project management aspects of PM.
Also, many executives struggle with strategies that entail deep learning or blockchain, because they simply don't understand them. To position for a future where those technologies are critically important, it's a good idea to invest time today to learn how they really work.
A thought... I have worked at monoliths, a mid-sized corp, a hatchery, and my own. At a monolith, your job is very narrow. I was bored out of my mind and left. At a smaller company, the role of a PM is much more interesting.
I was a PM but I had a coder's heart. I took the route you are thinking about. I would never go back to being a PM.
Two words: software architect
Definitely go for it. Especially, please have a look at my previous comment in the thread entitled "Sorry, developer bootcamps: I was wrong" :
To resume: to my knowledge, the best training to start your journey as an aspiring Software Developer is the one suggested by Founders & Coders :
(Note: Codewars is just so awesome... https://www.codewars.com)
By the way, if you can get into it, I would strongly advise you to apply to FullStack Academy, they seem to have the best teaching around there (at least their students have very high rankings on Codewars) :
Good luck :)
Trs cordialement / Best Regards,
Several of the people in my cohort didn't become a developers though, as they didn't seem to have the proper motivation to put in the necessary work (at least not to manage it in a 3-5 month period).
You can read about my experience going from non-technical to technical here:https://medium.com/learning-new-stuff/from-non-technical-to-...
Some of the problems I deal with in programming can take months of thinking to solve and any course that says yo can become a professional programmer in three months is a joke. What happens when you stumble a problem that doesn't have a ready made answer for you or you encounter a bug take days to discover.
If you want to become a professional programmer, just start coding. You don't need certificates to tell you who you are. Programmer is an occupation based mostly on meritocracy, It's a well known understanding in the industry that the best programmers are self taught.
Start by learning some text books and doing side projects. Try and get a job from there. It will take you 4-5 years of hard work to get to the level you mentioned. And note. There are many bad programmers out there that stop learning after 6 months and just accumulate time. Don't fall into that trap. Learning is hard but the personal reward is great.
Because they are trying to compress a lot into a short period of time, and because they are trying to keep it interesting and give students early wins, they seem to not spend nearly enough time on the basics, and jump straight in to using frameworks that do everything for you, the end result being that a bootcamp grad can quickly whip up an ok looking app that has basically no functionality but as soon as you ask them to do something complicated, they get stuck. Sure, that's not true of all grads, but I'd argue that the ones who come out of a bootcamp with serious skills are the passionate ones who would've done just as well or better on their own, so at best they wasted a bunch of money.
You are much better off going the self taught route to start off, maybe take community college classes on the side. If dabbling like that doesn't inspire you and give you the fuel you need to learn what you need to know on your own then software engineering may not be the ideal career for you anyway, what you know is a small part of the job, what you can figure out and learn are also huge factors.
Then you will think "Fuck if I were a PM, I would be a VP at this point, and my skills would be more sought after as I got older, not the opposite for a coder."
Stick with being a PM. If you like technology read up on it or program on the side.
Boot camps are like dipping your toe in the water. Most people are not qualified after only a few months of learning. It might take a year or longer to become skilled enough to get hired . A small number of very talented and lucky folks can get there in 6 months with no prior experience.
Before quitting, it seems important to validate the assumption that you will actually like programming and have some success in it. Try building a few toy/example applications on the nights and weekend for a month or two.
That being said, after much consideration, if you want to do it and feel strongly it is the right path for you, go for it. I personally love writing software. It feels like magic sometimes -- you type some words into a file, and very cool things happen :)
Anyway, one good way to do this may be to:
1. Take a hiatus. You may either tell your employer that you want to learn coding, or you may decide not to. Either way it's fine. Even if you tell your employer, if they are really top 3 tech company, they will understand and even encourage it. You can spin it as "I want to be a better PM and want to understand coding."
2. Learn coding
3. While you're learning, you may feel the urge to really jump in and become a professional programmer. Then be so.
4. If no spark comes during your time at those bootcamps, come back to work and continue. But even in this case, the world will be a completely different place for you than now.
Don't worry about people telling you that's crazy. Crazy is good.
But yes, by all means, if your goal is to learn to write software yourself, go ahead and get that extra education.
Coding bootcamps produce people who are conversant in the hot technology of the week, but if they were weak on fundamentals going in they're still probably going to be weak on fundamentals coming out. If you want to be a leader in the field, and not in the rank and file, you need strong fundamentals.
In my experience it hasn't mattered that much where knowledge has been "downloaded" from (college, bootcamp, self-teaching, etc). What has mattered is maintaining this "downloaded" knowledge and having it always updated to keep up with current times. Also, having actual projects to show to employers has helped me tremendously (e.g. open source contributions, client projects, personal projects, etc).
I'm self-taught and work at a BIG-BRAND company now as a Front End Engineer and make a six figure salary in the SF Bay Area; no college degree whatsoever, just a high school diploma. My resume says "Education: self-taught" and I'm happy to explain what "self-taught" has meant for me in the past six years to any employer. I've been able to work with people from all kinds of backgrounds: devs from bootcamps, self-taught engineers, devs with degrees unrelated to CS, devs with BS and MS degrees in CS and other subjects, and from many more backgrounds.
I'm contacted by many other BIG-BRANDs and small companies all the time to interview with them, and before I even accept to interview, I make it clear that I don't have a CS background, and that I'm unwilling to waste each other's time white-boarding algorithms - usually they're fine with this as they can clearly see my experience and instead they focus on the value that I'm able to provide. Many times I come across companies that ass-u-me I'm incapable because I chose a different path than them, but I've learnt to ignore the ignorant, and instead I focus on improving my skills and bettering myself as a programmer and a human being.
Any path you choose will lead you to a similar result. That's the beauty and uniqueness of our industry. As a final note, don't bother with comparing your salary with other people's salaries when/if you make the switch, as it won't matter at all if your income will allow you to live a really good life.
This is a world where you really need to aim to be the best in what you are doing, though. It's so competitive and there is no reason to expect that to let up. If you aren't doing that you can get stuck or hit a career deadend when the market shifts and those surface-level bootcamp skills become irrelevant.
So in my own space I am focused on a mixed stack of design, coding and leadership skills that is more in line with founders. The ability to pitch, to write up planning documents, to prototype and hold a vision, to study the marketplace and identify opportunities, to hone the vision through philosophy, as well as PM-type managerial duties. Those things are robust to changes in the technical landscape and they build on my own background.
Maybe do the bootcamp to get started, but keep your job and the opportunity it gives you to meet other great developers and learn from them.
My recommendation is: 1. learn the basics however you prefer, 2. study open source code, 3. build something medium-size that you can use, either home or work. If you're very good & lucky this may be your next gig. If not, you'll be a PM with coding skills, which usually is a pleasure to work with from a dev perspective.
Why not contribute by launching a startup as CEO? If a Harvard MBA with deep pockets and PM experience reached out about her startup idea, that is a beer or coffee I would take seriously. In other words it sounds like you have the background to attract a talented programmer cofounder.
Recently I was hiring on a tight budget. I've interviewed a dozen people from various coding boot camps, self taught web developers, etc. None of them could solve a Fizzbuzz level problem on a whiteboard.
(One thing I've learned after 15 years in industry, 8 jobs, 2 continents - a person who can't do fizzbuzz-type problem is not worth having onboard even for free).
It seems to me that even with best training in the world and a ton of prior IT experience it always takes people at least 2-3 years to start thinking in code in a way where you don't waste everyone's time.Learning to code is not about a bunch of syntax rules. It's about retraining your brain to use different mental models, developing intuition about where a bug might be, finding your way around a large and hostile codebase, anticipating how your today's decision will interact with all the features you'll implement over next 6 months, and so on.
Basic rules of programming are simple, but so are the rules of golf or snooker, or making bespoke suits, or wine tasting.
If you are prepared to spend next 3 years aimlessly poking around the debugger struggling to figure out the simplest thing only to realize at 11pm you were looking in a wrong place - go for it. It's frustrating but also rewarding.
If you think in 6 months you'll be able to build the next facebook with AI - only thing you'll learn in that time is how much there's still to learn.
Is this something where you could first try some of the online courses (Udacity, EdX, Khan Academy, etc) to see if you're actually interested and also able enough to do the job well?
Also, while I worked as a Software Engineer, I was not really doing much in the actual job and felt I was stagnating and falling behind. Most of the advancement in ability came during my free time where I'd try to learn new things, dive into new interests, create software I actually wanted, etc.
Eventually, work hours resulted in less and less time to do things on my own, and the crap at work got more and more irrelevant, tedious, and stupid. Also, management was all about trying to rid you of any competitive edge or anything else that makes you worth anything (or that brings you happiness), so in addition to all that was in place, it was known/realized they were going around each day looking for more ways to ensure every path would lead to a dead end.
It wasn't long before I wanted to quit and before I realized the only way to make it work would be to create my own company (or maybe become a freelancer/consultant).
But hey, we all get a little crazy when it comes to the things we love. Just be aware that a bootcamp is just the first of a great many steps before you can contribute to something you'd consider the 'future' and not 'move the button 10 pixels to the right'.
Unless you feel your PM role is a complete dead end, build on your experience instead of trading it away.
Edit, adding: A PM who understands software development, or a developer who understands project management, is a good set of skills to have.
Tutorials on various common "patterns" (RoR web apps, iOS apps etc.) are of good quality and easily available these days. As a PM in big tech, you can try to find little ways to contribute into the product's code base, which will teach you both programming and engineering practices. In my experience (disclaimer: was a PM), engineers are delighted when PMs show interest in code, and at least a few would be excited to hand hold you through the process of setting up your dev box, building the product etc. It's not a bad way to get better while making hand and fist full of money.
That said, like any other craft and practice, programming is layered and specializes. It takes 5-10 years to be "good", and it takes equals amount of time to be good in a specialization (say machine learning for example). Even for a good ol' engineer to move from building web apps to building machine learning systems, the barriers are still non-trivial. Furthermore, consider that a career in software engineering is perhaps more akin to spending 20% of your time building somewhat sexy* new thing, and 80% of your time doing boring boiler plate work, trying to pull your hair out digging through other people's APIs and code, and wondering why the build and CI system is so broken. If that's what you want to do, then go for it.
* most likely it's just a boring CRUD app using somewhat unfashionable technology.
That said, make sure you actually want to write code. Boot camps prepare you to make simplistic websites and mobile apps not the interesting stuff you mention. You'll have years of learning to get into those in a meaningful way.
Otherwise, it's quite odd. It seems you ought to be in my spot and I ought to be in yours. I plan to pursue a career as a product manager after I graduate (hopefully join a rotational product management program). I am currently studying computer science at a University of California. I have yet to have my first internship though but I plan to attend Recurse Center (https://www.recurse.com/) this upcoming summer to work on some iOS projects (I am more interested in mobile than say back-end or front-end engineering). And while I have good grasp of a few programming languages and tools, I do not think I would like to code for a living. It's fun building things and the future of software is indeed bright. I just find the aspect of programming on a daily basis will result in burning out, personally. Plus even when I do a gig as a product manager, I will still would like to develop mobile applications (particularly iOS).
Above all, there's nothing wrong with changing your mind and learning more. Plus you have an MBA and now you are going to have some coding skills. You are golden. So long as you are excited about what you are pursing, and not let that excitement fade.
If you really work in top 3 tech firm, your colleagues are Stanford/Berkeley/MIT/CMU grads, who ate rice and ketchup writing operating systems and compilers. This will be the level you have to get to to contribute to any technical project in a meaningful way. But basically: when you were doing business case studies and traveling around the world to meet world leaders and learn from the best CEOs how they handled corporate crisis, they kept hacking algorithms in a black window with grey letters. I know--I did that too.
I have 15+ years of UNIX experience, 10+ years of programming experience and 5 years of real-world software engineering experience. I'm thinking how to get your job all day long :-) This requires reading tons of books: http://www.koszek.com/reading/ which I do and I sacrifice time with my gf because of that. If you look at this list it's business, management, investments, people stuff. You'll have to do the same, but read about software and hack code in front of the computer, etc.
Most of HN experienced crowd are smart technical people with worse credentials, who are attempting to move from coding job to architecture/design/management job, which you now have. You are our target :) You can see it in many threads. It'd be like moving from a coffee shop manager to a waiter. Ask some senior buddies from a random technical team whether they'd like your job. It's good to see people appreciating each other professions, and we appreciate that too, but don't do this job switch yet or we will crucify you :)
My advice is this: take a break from work (just because you can -- you have a shitload of money anyway, or maybe just "enough" due to loans; go on leave, but for god's sake, don't quit your job), join the bootcamp if you really like, and don't tell anyone you did it. You see from this thread bootcamp, unlike your MBA, don't have established value in the industry yet. It won't harm you, for sure, but you won't be a software engineer. Bootcamp sounds good for you--you're a smart person and wants to learn more, since I think you haven't hacked much code before.
Better idea is what other guys say: just get yourself all online programs there are. All of them. They are $30/month at most, and Udacity is $200. Get them all for a month. You'll spend maybe $200 + 5*$30 = $350, but maybe $0, since first 2-4 weeks are free. You'll pick one that you like, because it'll fit your learning style. Stick to it and just do exercises. On top of that get books. Books are dirt cheap compared to value they bring to your portfolio. Whichever books you need; all of them. I think you'll have to end up doing bs I do for business/management books: google "top 10 programming books" and get them. Even if you don't read it, get it. It'll be maybe $350, since you may end up getting 10 books. So it's $350-$700 investment at most -- you'll get a grasp on what's going on. Then maybe $30/mo for 6 months to teach you one thing well and 2 in a sloppy way you'll kinda understand. And repeat it maybe 2 times. Basically: watch classes, do exercises and immediately after that write your toy programs on the side or (better) real products.
So you'll spend at most $1k to learn something you want. It's also spending $1k to save your $150k investment you've made by doing MBA in top 3 school. It's 0.7% cost of what you've spent on school, and still much, much cheaper than a bootcamp.
If you're a good MBA you're a cheap, stingy bastard that can get people to pay for your stuff. And top 3 high-tech companies have educational grants. Some up to $9/yr. They pay you for your education. So have the company pay for this bootcamp, if you come up with good enough reason, it'll be all free.
If you absolutely truly love hacking code and are obsessed with it and you think that yes -- this is your 2nd calling and you basically don't see yourself talking to people anymore - congratulations. You are eligible for leaving your job, retraining yourself and entering coding workforce. Trade your suit for dirty sweater and you're all set to apply for a junior dev role.
But I think it won't happen.
What will happen thanks to my advise instead is this: you'll make yourself be in like 0.1% top category of MBA people who truly understand what software is all about AND have a PM job. People who you work with will see that, so you'll be getting good reviews etc. You'll come back to this thread, see how wrong about PMing you were, and you'll apologise. You'll then keep studying and getting better at being a PM and being technical manager. You'll learn how to manage technical people, how to partition tasks, build features, build products and build tech companies. And no, it's not very easy and it's not fading away. I see you posted some stuff about machine learning in the past. If that's your field of interest: go and get TensorFlow original publication from Google. It's a paper where you see an abstract is shorter than a list of authors. Do you think these guys would have built Tensorflow without any PM of some sort?
Anyway, story goes: then you will quit your top 3 high-tech firm, and start a high-tech startup, get $20M in funding. And then you'll come back here, DM me personally and offer me 1% in your new enterprise for having a profound impact on your life and you'll offer me a PM role in your new startup. I'll gladly accept it for this 1+ hr free of charge advising.
I've worked in startups and the game industry as a programmer, designer, producer (probably more like your version of PM), and kind of as a PM (which, in gaming, is probably like some percentage of your job now, but not all of it).
It's definitely true that having worked as a designer and programmer was INCREDIBLY helpful in making me a better producer. The ability to communicate with people you manage or need to make decisions for at a passable level of their domain knowledge will be very fruitful and will help you command their respect. You'll make better decisions too, of course.
Feel free to email me if you want to know more. (That goes for anyone here, I'm always happy to give advice.)
The chances that you happen to turn out very good at programming and that you land a job doing exciting stuff that you love in a cutting-edge company are virtually zero.
You may have an idealized picture of what developers do. You can try and learn some programming in your own time (yourself, with tutor etc) and see how it goes before taking the plunge.
And truthfully, most companies today are really bad at management, particularly related to technology.
Learning to code is a great idea but I would think of it as supplementary to your management work.
You're right about all these amazing technologies that are being developed, but truthfully, the stuff you learn in a bootcamp is not going to put you in a position to do much in those fields. It might be a small step in that direction, but you would need to go way beyond it. Advancements are coming from folks with deep knowledge of math, algorithms, systems engineering, etc.
The skills you pick up learning to code will be tremendous for managing others to build what you need.
Coding is hard to do well and takes years to get really good at it, and you will likely need to start at the bottom of the food chain to get the right coaching and support. I'd recommending learning enough code to be dangerous but get experts to help you do the hard stuff.
That said if this choice is about happiness, then go with your heart. Money shouldn't factor into that decision, it will come over time.
Having some kind of hard technical skill very important. It help you tackle harder problems that arises in the future. For example let say AI becomes increasingly important. Since you know some code, you ability to lead in this a new technical field will be better than someone with no technical ability.
FYI i'm a coder and founder of a software company. Most of my time is spend on PM now.
We're in a period when everyone is "learning to code". This means the potential pool of developers (ignoring their actual talent levels) is growing.
Someone has to check whether the stuff people are making is following whet needs to be created. Someone has to be able to manage the teams of people making these things.
I'd suggest your premise is the wrong way round.
Or, go back and become an expendable framework of the week coder and then find yourself needing to relearn those skills every 5 years to do the same rote job.
Coding is great fun, until it becomes a routine. Then it's just like anything else.
Not crazy if you hate PM'ing, or you are not good at it, or are not motivated by climbing corporate ladders.
Take the coding bootcamp. Do one of the longer ones, like the 6 month one if you can. Or do one of the online ones, and be disciplined about it, such as teamtreehouse.
And then go back to being a PM, but use your knowledge of the difficulty of coding to leverage many developers to work towards an important goal.
As for learning to code because of things like the blockchain, etc, keep in mind that bootcamps teach you to build web apps, not that level of programming.
Most technical careers are competitive and short.
Like several other commenters have said, a better approach would be to learn coding on your own time. (Choose a languageany language will do, learn the basic from a introductory book and codecademy.com, then work on small weekend projects)
And how are those not tangible?
Find someone to complement you, then try changing the world. one small project at a time.
Instead of something like a coding bootcamp, I've taken courses at the local university. Almost all universities (including Berkeley) allow non-enrolled students to enroll in 1 or 2 courses.
Keep the job, join some open source projects, solve some issues and enjoy the process if you can.
You can learn how to solve digital problems by coding while you work full-time somewhere else.
Good luck in any cases
Pay particular attention to the segments on emotional intelligence, motivation, engagement/disengagement(!), and professional development. It'll not only help you understand what is affecting your motivation and disengagement, but you may also realize your greatest strength is that you are motivated to solve these problems not just for yourself but others in your organization. Understanding the way things should be could just cause you to double down as a PM and master the challenges of the role while further developing your skills to advance your career.
Good leadership focuses on the health (and happiness) and growth of the individual as much as the organization. Maybe you are just in a poorly run organization or one that has poor leaders. Discontent is usually a pretty good indicator this is the case, because even if an individual is the problem, a good leader has the awareness to recognize this and have a good relationship with their staff that enables them to make the staff member aware of their strengths and weaknesses and the source of their discontent so it can addressed be remedied.
It sounds to me like you want to more authority and control, or at least more challenges and your organization's leadership is not addressing that. Without that your growth and personal development is limited. Being a coordinator is little more being an admin that tracks status and doesn't require much tactical or strategic decision making. Your manager should understand this and being stretching your abilities in every area little by little until they trust you to make those decisions. They should always be preparing you for the next level up. Maybe you aren't aware of your weaknesses and they are not identifying them and working on them with you. Maybe your desire to quit and become an individual contributor is just an Escape Coping mechanism for dealing with stress instead of a Control Coping mechanism which is positive and proactive. Or maybe they just have poor leadership skills.
It would be terrible if you quit your job and lost the opportunity where you are to address your weaknesses and strengthen all of your skills in an attempt to start over because you feel it would give you more control over your happiness, especially given all of the capital you have built up in that role over the years. Besides, if the problem is your desire to leave is a just an unhealthy response to stress or a challenging situation, it won't solve anything.
Just a thought, but one from someone who has been there.
What did I do in your situation? It took me a while but I watched that video, combined my awareness from it with formal knowledge of PMP (Head First PMP is good start) as a reminder of what project management is all about and what my organization did wrong as leaders of a functional versus projectized organization (a weak matrixed organization), and then I studied stress management to help me understand my own (unhealthy) responses to my situation.
If I had done that while still at my organization I would have not only felt empowered by the evidence and knowledge, but challenged to work on myself and the organization at the same time, and could have been perceived as someone with greater leadership potential that would have allowed me to level up. Even if I still decided to leave, I could have improved my skills while there to prepare for a move to a healthier organization that I would have been better equipped to recognize and excel at.
FYI I strongly considered a Masters in Data Science which would have had a narrow focus either as a developer, data analyst, or data scientist, but at the risk of competing with people who were younger and/or smarter, and rooted in those disciplines from an earlier age. I decided I should master my management and leadership skills instead, leveraging and building upon my knowledge and experience at a better organization. I am unemployed and working on that now. Once I get a job, even if it's a contract position, I can still take the online courses to get that masters degree from a top university and also take advantage of being around people in the industry that do what I aspire to do as mentors.
I sincerely hope this helps.
The two points I think are worth considering are:
1. Coding bootcamp vs postgrad qualification in CS or similar. I'm not in the coding-bootcamps-are-the-devil orthodoxy. In fact, I've seen a lot of great juniors come from bootcamps, but you do have to recognise their limitations. A bootcamp will get you to the point that a self-taught highschool code wizard will be at just before they hit university and realise that they don't know anything. Employable, sure, but lacking in fundamentals. You don't have to learn CS from a university, but one way or another until you learn it there will be a ceiling on how far you can progress as a developer.
2. Part-time vs full-time transition. One thing I will agree with is that you are going to be a way worse software developer than you are a PM, just by sheer weight of hours put in. For that reason if you're looking to make a switch I would do that wholeheartedly rather than learning on the side or moonlighting. Otherwise you'll be pulled in two different directions, and the one that you are better at, have more experience with, and can earn more money from will probably win.
If you genuinely want to be a developer to build stuff, I would do the coding bootcamp, get any job as a developer you can find, then teach yourself CS as quickly as you can while on the job. The CS will mean more and be easier to understand because you already have the practical skills and you'll be able to call yourself a developer sooner. Just be aware that the stuff you build straight out of a bootcamp will not be deep learning blockchain automation algorithms for SpaceX, it'll be web apps with questionable business models.
Another option is to just bite the bullet and get a real CS education up front. This will take longer to get you to a point where you're actually building things, and keep in mind that CS doesn't give you practical skills, so you'll probably still need to start with entry-level dev work, but your trajectory to doing interesting stuff will be steeper from there.
Ultimately it's down to your resources and your priorities. If the drive is to just make stuff then go with the bootcamp, it'll get you there sooner. If you mostly like the cutting-edge ideas and high-level work (and you can afford it) go with CS first. Deep learning isn't bootcamp material.
And keep in mind that either way you're 5-10 years out from being good enough at this stuff to really live up to the picture of it you have in your head, so make sure what you're doing in the mean time is going to make you happy.
It took me 2-4 years to get on a level I was ok again with what I contribute in my role (lead architect). In these transitions I had the benefit of solid coding skills from way back plus having worked at a tier-1 corporate lab for a few years. I had the benefit that the company supported me but that came also with constraints on freedom and focus in recovering the skills.
Coding school may give you basic coding skills. The deep knowledge you would need to be a good coder however will take many years to acquire. I would be surprised if someone got to a more senior developer role in less than 4 years and going to architect before 6. Only then you will again be able to shape things. Until then you will have to implement what other - often a lot less qualified product managers have thought up for you to do. Often of the code will be for /dev/null as most projects fail in any case before hitting the user. I sometimes think salaries in tech will always be good as frustration tolerance is never going to be a commodity.
I found product management a very difficult proposition. It can be incredibly hard to add value in that role but then on the other hand it can be one of the most powerful and decisive roles too (Jobs do I need to say more). There is a lot communication and coordination and that can be fun but also can feel void. Shaping from that position takes serious political skills to acquire the necessary power and to wield it.
The way I think about these changes:
- what can you leverage into the new role?
- is there a plan B?
- do you truly like that type of work (tools, processes, travel, challenges, conflicts)?
- do you like to work closely with these type of people?
- what drives you? Long term vision?
- what are your strengths?
- what technical and interpersonal skill you want to learn? Will you learn anything new?
Would I have hired you when I was team lead way back? Iff you showed up with lots of enthusiasm for coding and passed our structured technical interview - maybe into a junior developer role. Willingness and ability to change was a key criteria for me. But I know I probably had to argue both technical staff and HR. I never worried about someone going for my role but maybe with you I would have worried about that on my side.
By all means learn coding. You may however want to give some thought on possible paths, risks and contingencies. Coding - considering your starting point - is certainly one option but comes with a high risk of significantly lower ability to contribute and ultimately benefit from it. Project management may be another. Consulting in the area of requirements may be another.
I can see through your words that your interests are to participate in those great new ideas and to achieve greater things but you can make it happen without that Bootcamp especially without quitting your job. If you decided to attend to a good university it was because you really wanted to leave a dent on the universe. There are cases such as the orchestra director where although he does not play any instrument he must at least learn to play one to understand the essence of music before being able to lead. But in our ecosystem what is rewarded beyond our vision is our ability to execute.I believe that you as a PM have one the most valuable assets because you can take any talented team and give them a vision towards execution, that they will appreciate because people do not know how to execute complex Things step by step the way that you do. Besides that if you give them that strong desire to accomplish excellence that breaks the molds. And that stamina to persevere even in the darkest hours you are set.
If I could go back 3 years in time, I would ask for the refund even if I had to pay something. Instead I would use that money to spend more time observing regular people, maybe participate inside university activities, labs, study groups and invite complete strangers to take espressos or beers with students or teachers and bond with them. Instead of being a solo learner I would encourage myself to be a part of a group. My job would have been to create any initiative with them on the topics I sought were worth it and even if I knew it wouldn't work I would put all my experience to support the implementation of these ideas. I might not knew how to type a line of code but I would have felt more alive to be able to see those ideas become a reality, even if it wasn't 1% my vision, even if if wasn't my code, even if I only was able to sit on a table with just one talented person and be able to keep him motivated and enthusiastic after the first prototype was made and help him with the first sale to come, that would have been enough. Instead of investing in Bootcamps you could interact more with humans, learn more about human behaviors, spend more time with your family or children, travel more to meet with more people and take advantage of the work you have right now to find mentors or talk with your peers about your expectations in those topics that you like to execute instead of being in front of your laptop fighting with your lines of code that someone you work with can do much better in less time.
Finally I have to say it surely was a blessing to become a developer, right no I'm working as CTO/CEO but I 'm about to let go, and I know it's going to be hard, anyways in your current situation where you have much more knowledge and experience, only quit to carry out your ideas but if you definitely want to play don't forget that sooner or later you'll need to delegate and learn to orchestrate and for that you don't need that Bootcamp.
P.S.: Forgive my bad English.
You're not crazy to make that career switch, but you are crazy to attempt to do so in that manner.
Start reading books on programming and teaching yourself instead, and start working through the actual exercises. I think Python is a good language to start with.
During my break: I learned squash (so much fun - can't get enough of it, and it's so good for you), studied Spanish (lovevto travel in Latin America), learned a bit of Scala (not really that much, to be honest), took some salsa dance classes (tough, but so much fun. Met lots of new friends), and did some Lynda courses on video editing (for making fun travel videos). I also spent a week and a half doing a road trip through southern France and Italy. Read a lot of books that were on my "someday" backlog - almost 0% TV!
As someone else mentioned, the quasi-unstructured time in the day was so refreshing. I loved just doing some random boring errands, bumming around the coffee shop talking to people, taking a long walk in the park with the dogs (I live in NYC)
I'll tell you: I'm 2 months i to my new job (technology job at a startup), and I really miss the feeling of this unstructured "regular life", or whatever you want to call it.
Cherish it, but don't overdo the planning, as it'll stress you out!
All the best!
Over the past few months, I've been keeping a list of things I'd want to focus on. Ultimately, I decided to trim this list to 5 things, because I don't think one can focus on more than 5 things at once. Here they are for me (unranked, equal importance to all):
- Working on my Japanese (I'll be in Japan)
- film photography
For the last two items, I've been keeping a list of books to read, and topics to investigate/projects to work on over the past few months as well. Then I trimmed theses lists to end with 1 book per week to read and 1 programming project per week to work on.
Of course, I'm likely to deviate from it, but having these lists and priorities as my guiding star will be helpful.
If I were to do this for 6 months, instead of 1.5 months, I'd probably break it down in 1 month chunks, with varying priorities per month, and a bit of loose time in between said chunks to account for unexpected things/rabbitholes to go down.
I also have a 5 day mountain hiking trip in the middle of it all, because in my experience there's nothing better for your brain than disconnecting absolutely from reality, and centering your days only around walking/eating/sleeping/looking at beautiful landscapes.
* Learn how to play three open chords on the guitar. I would recommend E, A, and D.
* Watch this video on how to write a song using GarageBand. It's easier than you might think, and a fun thing to do with kids.
Compose, record, and mix a song! Also learn about fun technical audio stuff like levels, EQ, compression, reverb and the like.
- Learn a foreign language, again 6 months is a perfect amount of time. Highly rewarding.
- Work on holes in knowledge, build a self-course around it. Algorithms, dbs, whatever.
- Pickup an new programming language.
- Build a side project, doesn't have to be commercially viable, could be open source or not. Build a redis replacement for no other reason than to understand it.
- Travel. I understand the constraint of wife/kids, but there are ways to fit it in. Don't have to live in Southeast Asia, but travel, I feel is a great brain boost. Awesome rush of new.
I'm wrapping up a self declared sabbatical right now. Most of it was traveling and reading history books on the country I was in. There were a couple career inspired prototypes (web and mobile). Now I'm on a a coursera and reading kick for stats, probability, and ml.
Enjoy the "break"!
See Jeff Bezos' regret minimization framework for inspiration: https://www.youtube.com/watch?v=jwG_qR6XmDQ. Imagine yourself at 80. What would you regret not doing?
Now that I'm settled into my new job, it's the one thing that I'm still doing more regularly than going to the gym or going on hikes.
1. Finishing real estate course so that I have the license to pursue alternative career in free time/ weekends, etc.
2. Buying groupons for unlimited Yoga classes. Never been able to stick to a workout routine so hoping will get something from yoga (hot) to be in a little bit better shape before Jan/Feb comes and things get crowded.
3. Planning to travel for few weeks.
4. Talk to some startups (I have been in corporate world) that are really making a difference to just know about 'em!
Have you travelled much outside of your home country before?
- Powerlifting (one session, teaches you good form for several lifts)
- Small diesel engine maintenance (6 weeks, evening)
- Professional bike mechanic certification (5 weeks, full time)
- Upholstery (workshop format, as many as you want, $100 per session)
- Cobblery (haven't found a course yet, just really want to learn how to make sweet shoes and bags)
- Linux sysadmin (online but with a human coach, costs a few grand)
- Welding C certificate (evenings, 3 weeks)
- Swing dancing (Monday and Friday nights before the mixer, 8 bucks/session!)
I ended up doing way less than I expected. So my advice: leave behind everything connected with your job and focus on the unusual.
Learn new things you've wanted to learn. Master new skills. Take a few MOOCs.
Spend more time with your kids.
(if you're not essential for childcare or similar at home, and more important if you have not seen the world before).
My wild-assed guess? Based only on the ridiculous amount of computation needed to simulate neurons, the first roughly human-like AI will stretch the hardware it's running on, and the budget of the organization responsible, to its absolute limit. It will probably not even run in real time, more like 1:100 or worse, with its creators rationalizing that ratio as actually being good for their scientific purposes (a slow-motion process is easier to control, study, debug). Hardware is hard and expensive, and attempts to scale up to real time will only be made once there is a convincing case that there are no easy design gains left to be had. It will take years.
And once that happens, you will have a roughly human-like AI who has no more of a clue how to make itself smarter than you and I do.
We are pretty well compartmentalised against 'superior intelligence' anyway so it seems. Not too many philosopher kings around these last few millennia.
Exponential growth starts very slow, even slower than linear growth at first.
--Do code reviews
--allows workers to learn from each other as well as other people outside of engineers.
--Have a coding standard
--Use boring technology as most of the bugs would have been found
To improve morale
--Treat people with respect
--Allow people to explore different aspects of the business
--Recognize people when they do a great job
--Allow for constructive criticism
--Don't let management get out of touch with the business
You'd be surprised how many dirty looks I've gotten for stepping outside in the middle of the day at most jobs and not smoking or going to lunch.
- Make a rule that anything that's in master can be deployed by anyone at any time. This will enforce discipline for code review, but also for introducing changes that f.e. require migrations. You'll use feature flags more, split db schema changes into several deployments, make code work with both schema version, etc. All good practices that you'll need anyway when you reach larger scale and run into issues with different versions of code running concurrently during deployments.
- If you're using Github, check out the recently added options for controlling merging. Enable branch protection for master, so that only pull request that are green on CI and have been reviewed can be merged. Enable different dropdown options for the merge button (eg rebase and merge), these are useful for small changes.
- It takes some time to get used to those constraints. Make sure that everyone is on board, and do a regular review of the workflow just as you would review your code. It takes some time to get used to, but I think it's worth it in the long run.
To be precise, small feature branches are perfectly fine. They are meant to be reviewed and squashed into master ("trunk") in a few hours to a few days maximum.
Squashing instead of merging has a big advantage of being able to quickly revert the changes if things go awry despite all best practices in place.
PS Avoid gitflow and similar workflows as they introduce leaps and thus risk. As everything in software engineering, you want your workflow to be as incremental as possible.
Feature branches were rebased then merged with a --no-ff. This creates a merge commit on master which includes the ticket number and short description.
The rebase is done by the feature branch developer who is usually best qualified to do so.
The advantage is that changes are isolated from each other, so nothing is spread before it's reviewed. The rebase makes the history easy to follow because it becomes linear and you can always easily see exactly what was changed in the branch. You still retain the full history of the feature branches.
Disadvantages: it doesn't scale to a massive team because you need to linearize the merges back to master. So it works for upto around 20 people.
I'd recommend against Git Flow because their method of merging makes it very unclear exactly what was changed in a branch. I actually prefer no feature branches to using Git Flow.
The main cherry I like to put on top is to always rebase before merging then merge with --no-ff (which is the default with GitHub PR merge button). This gives linear history for purposes of git bisect but preserves the topic branch structure so you don't have to read the tea leaves of the individual commits to piece together the overall development timeline. That one little piece goes a long way to addressing the concern that "rebasing destroys history" (which I don't agree with anyway, but that's the topic of another post).
This might not be worth it for certain types of contributors who are not programmers by trade, but for career programmers I believe mastering git and rebase in all its flavors (-i, --onto, pull --rebase, etc) pays big dividends that your team will appreciate more as the years go by. For git beginners maybe you start without rebasing, then learn the ins and outs of rebasing with local branches only before pushing, before finally going the whole hog and rebasing topic branches with force push before merging.
One last idea I like is Zach Holman's recommendation of deploying topic branches directly and then merging if there are no issues (https://zachholman.com/posts/deploying-software) in order to have easier rollbacks. Then you have 100% guarantee master is always stable.
Right now, I work on a smaller project, we use similar workflow - we haven't implemented feature flags yet, but I suppose we will in the future (the project hasn't been released yet actually). I personally don't like developing an entire feature in a separate branch and then merging when it's all over, because code review becomes tedious (and ineffective) and the risk of merge conflicts increases. I would suggest you invest time in writing tests, so you can become better at it (if you aren't already) and it becomes a natural part of your development. Same goes for feature flags :) I was a junior when I started working like this (I still am, kind of) and it meant the world for me :)
We just keep it simple like:
- No one pushes to master.
- For every feature (or update on a feature), create new branch.
- Send pull request for reviewing (one of us is the reviewer).
- Merge pull request into master.
You could try git workflow, but it's just too complicated for small team (and for large teams too?).
Also, the Pro Git book: https://git-scm.com/book/en/v2
Only working, tested code should make it into master. Code reviews and automated tests are great tools for this, but ultimately, it's up to the individual developers to not be sloppy.
Avoid long-lived branches and big merges. If you've got big features that take a while to complete, break them into smaller things you can deploy sooner or use feature toggles.
Don't leave it too long between deployments. Small, frequent updates are far easier to manage and far less risky. A dozen deployments a day are better than a dozen a year.
Everybody should stay up to date with master. Rebase on top of master before merging instead of having awkward merge commits that only obfuscate history.
If you have people working on features that take multiple commits to implement, use feature branches. These should be rebased onto master and cleaned up before merging into master.
If you combine all of the above, you're heading down a path similar to GitLab Flow or GitHub Flow, so strongly consider using one of those instead of coming up with your own from scratch. Don't use Git Flow. It overcomplicates things and offers zero benefits over the alternatives. As far as I can see, it's only popular because a lot of inexperienced Git users were feeling like they were adrift without a workflow, and a blog post with a snappy title came along at just the right time to catch their attention.
If your team don't have good VCS habits, you need to do something about this. Small, frequent commits that do one thing and one thing only, good log messages, push and pull frequently, etc. If you can't describe the change briefly, you are doing too much in one commit. There's lots of best practices articles for Git that have been written read them. Also read Pro Git, which is free on the Git website.
- Branch off master to make your fix/feature. Prefix branch name with "fix/" or "feature/" accordingly. We occasionally use a "script/" or "migration/" prefix too. - Do work. Use "git app -p" so commits are fairly small. - Make GH PR into master, get code reviewed. CI test are run automatically. - Deploy branch to staging environment and test. - Merge with GH, deploy to production.
- master is always in sync with production, and so is always deployable. - never commit to master. - we don't use a develop branch.
There is only one long-lived branch in each of our repositories: master. All other branches in our GitHub repos exist only to perform a Pull Request/code review.
PRs must not be merged in to master until all unit tests are passing (the unit test suite is run for each new commit to a PR branch) and the change has been reviewed by another member of the team. In almost all circumstances the person who raised the PR is responsible for merging it. Once the PR has been merged in to master the GitHub branch is deleted.
Our CI server creates a new build for _every_ merge commit to master, automatically pushes this build to our integration environment, and then runs a series out automated integration tests on the system. If the build or automated tests fail then only PRs that fix the build are allowed to be merged in unless they are trivial.
Once our DiT is ready to perform a test, she promotes a build to the test environment and does her thing. Tickets that have been tested are then reviewed by a product owner and if they are happy the build gets promoted to the Live environment.
both work well I think for small teams just depends on how well you want to organize things.
master ("production") branch:
- this is deployed
- nobody (not even GitHub Org administrators) can push; master is only changed via approved PR
- the base "working" branch during each 3-week sprint
- pushing is allowed iff the change is trivial or already has team consensus (e.g. changing linter rules)
- this is where we demo to our Product Owner
- branched from dev
- named along the the lines of "alternate-checkout-TFF-75-story"
- base branch for any work that needs to be done for a user story
- branched from the corresponding story branch
- (usually) named along the lines of "item-unavailable-TFF-92"
For all branches:
- CI must pass
- all PRs require >= 2 approvals, unless it is a trivial change then only 1
- require PRs when merging upstream (i.e. task -> story -> dev -> master)
- merge freely when going downstream (i.e. master -> dev -> story -> task)
- do not merge from story-A to story-B nor task-A to task-B
- squash commits when going task -> story and story -> dev
- do not squash when going dev -> master
Having stroy & task branches help keep the changes for each new feature in easily digestible chunks. The story branch is particularly helpful when two tasks need the same code, but the story, task-A, nor task-B branches are ready to go to dev. So we merge the shared code to the story branch, then the other task branch can merge down the required code from the story branch.
Currently, there is some contention over our verbose branch naming scheme. Previously, when 3/5 of the team was working on a different project, the branch naming scheme was "name-of-story-TSS-XX-story" for stories and "name-of-story-TSS-XX/name-of-task-TSS-XX".
This is nice because in addition to the isolation it provides when everyone is working on their own fork it's easy to code review changes BEFORE they land in the "blessed" repository.
It's also nice because junior developers aren't pushing directly to the blessed repo either.
This model is really nice for maintenance and small feature development.
For major new development (new version, major feature that multiple people will work on) we tend to revert back to the behavior of committing directly to the blessed repo.
In the end, however, it is going to come down to the specifics of your app and environment. What sort of CI do you have set up? Do you have anything that controls when or how you are able to release code? These types of things are what generally push teams to other models.
Feature branches are named after a ticket. Pull requests are across branches in the same repo, not across repos. (It's marginally easier to collaborate on feature branches if they're all in the same repo.)
We don't (yet) do full continuous deployment, so many feature branches get grouped together before a release. Our strategy is to test* each feature independently and then merge all the tickets together to a branch named "staging". The staging branch then gets run against some extra regression/acceptance tests and whatever manual tests we may want. If they pass we merge to master, tag, and deploy.
Seems fine so far. Specifics about our tests and deployment process drive the Git workflow more than anything else.
*Run the test suite, test manually, whatever.
The biggest change for us when we starte was do not push features for the 3 month release into master so at any moment or bug fix master is always ready to go live anywhere without some dumb new feature we don't want. Keep master clean dammit :)
Will you only have one version of the app released at a time, (websites) or multiple versions (native, mobile apps). Will you have just one team or multiple teams working on the same app at the same time?
Answer these questions first, then and only then should you seek for a workflow.
1- every dev works on a topic branch
2- always rebase before committing
3- have a jenkins running somewhere\
4- everything that gets merged into master gets automatically built and tested
5- everything that gets merged into -RELEASE gets automatically built, tested, packaged and deployed
6- Use issues from gitlab/github
7- Did I mention to always rebase before committing?
This isn't much and isn't exaustive, but it's a start.
An admin merges a release back into Master and back through to dev after a milestone build, demo or production release.
Keep the same Workflow with other teams in your organisation if it exists - unless it is fatally flawed - so that team members moving around have the same experience. Consistency and all that
Next to feature branches.
Jenkins for updating
Beta = production databases, but automatically copied, to avoid production errors ( lots of parameters to customize stuff)
No develop in master, just merging
Just commit everything to master and that's all! Sound stupid but worked best for us. I have seen a big software company using this, I learned this from them and never looked back!
Also, what's your QA process and what is the usual quality of your builds? How R&D heavy are your new features, and how long do they typically take to develop? Are your programmers own different parts of the codebase, or is every one of them able to work on anything?
Without all this details it's impossible to know which workflow is ideal for your particular team.
It benefited me in the sense that I ended up making some new friends out of it and had a lot of fun just learning (or trying to learn) a second language. I think learning a new language like this can open up some doors and can help you meet a lot of new interesting people you'd perhaps not have met otherwise. I'd love to pick it up again next year. So we'll see.
I would say that, to some extent, knowing several languages helps you with learning the next one. Not just if it has features that I already know from other languages, but also if it has new "WTF" aspects. Those become easier to accept.
What I mean is this. My last relocation was to France, for which I had to learn French. French has a bunch of things that make me go "WTF", but knowing that every language has such things makes it easier for me to shrug them off, accept that French is weird, and carry on. On the other hand, some other expats I know, who know fewer languages, question everything: Why does French do this or that? I have the feeling that some people get caught up in such issues and develop (or reinforce) an internal resistance to learning.
TLDR: Learning languages may make it easier to learn others by making you more accepting of weirdness.
Learning it has indeed brought me amazing benefits, chief among them a Hungarian wife. :-) Seriously though, all human languages have qualities unique to them, and once you speak a second language fluently you realize that there are entire ways of seeing the world that are only possible to describe in that language -- indeed, I believe that for every single natural language there are things it's only possible to think or conceive in that language.
This is probably less significant if the language is closely related to your own, but one of the thrills of learning a very very different language is that it opens your mind to concepts you realize you'd never have remotely understood beforehand.
As an added bonus, Hungarian is quite beautiful, and the Hungarian capital city of Budapest is a fantastic town.
So, if you're asking because you are thinking of learning a not-so-famous language then I encourage you to go for it. But understand that without immersion you'll never get far, so make a plan to go live in a place where they speak that language, at least for a year. And once you get there, don't slack off: some great places with unusual languages can easily accommodate you in some more common idiom.
What is interesting about learning a conlang, especially one with such an interest in being unambiguous, is that it aggressively points out how weird language actually is. I'm a native English speaker and the sort of person who just shrugged by all of public school English via the "it sounds good" argument. I really have no conception of what the structure of English is except in my own ability to use it.
Learning even just a small amount of Lojban helped connect my ideas of natural language to similar ones in logic and semantics. It did so even more effectively than learning Mandarin has even though I've learned far more Mandarin.
I think if you're interested in turning your analytical eye toward your own use of language in order to better understand what does and does not make any sense about it then learning a bit of a conlang is probably a good bet. It's the next best thing to having a linguist friend.
I think it benefitted me, even if I didn't learn much.
It let me look a bit deeper into Japanese culture. The politeness is baked deeply into the language and the sheer amount of Kanji told me that a Japanese person has to constantly be on track to not forget even the most important ones.
On the other hand Japanese seemed antiquated. 3 sets of symbols and one of them has thousands of items. The gramma seems kina straight forward, but the sentences simply get too long fast.
I speak German and English, which aren't drastically different. But while learning Japanese I found out how different languages really can be.
English is a bit compacter than German, no "der/die/das", just "the". Most words are not capitalized, no compound words, etc. but English is A LOT compacter than Japanese.
"Avez-vous du coin?"
Caught the plane with 3 minutes to spare.
I believe growing up as a bilingual with two completely different languages gave me an edge in learning other languages when compared to my monolingual peers. When we started learning a foreign language in school, my monolingual peers didn't seem to grasp just how different the languages can be. All through school they tried to apply the grammar and phonology of their native language to the language they were learning. For me it was always a given that even similar sounds like consonants are often vastly different, that words can be in whatever position they have to, not just where I'd like them to be. Though, truth be told, I had no preferences in that matter to begin with since I was constantly switching in my mind from one language to another with a different word order. I am quadrilingual today, and I am not even a big fan of learning languages per se.
This might be far fetched, but I think it also made me more organized and disciplined, or at least it helped to do so early on. This mental context switching forces you to pay attention to the details for one thing. For another, it also gives a sense of "protocol" early on. You understand that you should speak one language to some people and another to the rest. In process you see that this thing is even more subtle because you have to choose styles withing the same language to match the social situation.
Last but not least, knowing the languages gave an early access to two different and often clashing cultures. This, I believe, made me less judgmental and more accepting of other people, at least when it comes to cultures. Not because it was the moral thing to do, but because noticing all the commonalities and differences between people became an exploration on itself for me as a kid. I am genuinely curious about people that are different from me, either by origins or mindsets. Being a typical white nerd and health-junky, I am easily bored by other nerds and health-junkies, but give me an alcoholic and I can talk to him for hours straight despite never being drunk myself.
As for knowing it fluently, my Mum and various of her friends are all Dutch living in the UK. Many of them earned some money from it in some way, including:
- doing translations - getting jobs in the local port because they were bilingual - teaching night classes in the language - emergency translator for customs
My friend's wife is a US Bulgarian who speaks French and got a grant from her uni to go to Bulgaria this summer to interview Bulgarian software companies (I think including Chaos/XCom maker Julian Gollop who lives there now).
Then again I know others who never use their 2nd or 3rd language.
Basically, it opens doors to experiences if you want to leverage it.
But honestly it doesn't benefit me currently other than some trivia knowledge.
This lead to my first software development position at a large international bank.
I worked as an RPG developer for three years then I pivoted to SQL Server/C#.
So yes knowing a not so famous language benefited me.
Potential risk: choosing bad content could cause more conflicts than new connections.
Why not done: just came up with it, also unlikely to be profitable unless you get a research grant for it.
Trigger: this idea is similar, right? https://twitter.com/Aelkus/status/796845589254275072
For people like myself who like great art but have very little knowledge about the relationships or even chronology of the various movements, it would be great to have a broad range of artworks representative of the various movements placed on a map. Together with a slider type interface to choose time periods I think you could get a really good idea of how and when the different movements evolved and how they relate to each other. You could easily see for instance that there wasn't much happening in city x in a particular decade but a lot going on in city y. Move forward a decade and while y might be in decline, you can easily see that city z is becoming active - and that the newer works have clearly been influenced by what was happening in city y a decade earlier.
I have a fairly clear idea of how something like this could be monetised, together with how to get the necessary content. Haven't given much thought to how it might be marketed though. You could call it 'Art in Space and Time' (artisat).
I like that it presents a great challenge from a UI perspective - it could be done really well or really badly.
Anyhow, work keeps getting in the way...
If anyone likes the idea, go for it. Get in touch if you'd like to hear a little more - I might even be willing to get involved.
Customers simply type what they want. GPS locates the customer. Companies submit reverse bids both manually and algorithmically. Customer accepts what suits them best. Yay, money saved, time saved, customer happy.
Specifically, I don't have enough experience building android apps to make it as slick as I would like. Happy to talk with anyone about it. Can build back end, will travel, etc :).
I would like to see a larger effort for the SV community to expand into some of these communities and help give some of these communities a much-needed economic jolt.
1) Some kind of crawler that goes through YouTube videos indexing them and its subtitles and then when a user searches a word or idiom the web app would show some part of a video that speaks exactly that search term.I know there are other services that does that, but I want something more natural since these services use some kind of text to speech with a robotic voice and not a real life situation.
2) An old school open world MMORPG with modern graphics and a mix of Ultima Online (PVP) and Diablo III (Dungeons) gameplay. Nowadays every mmorpg is a copy of World of Warcraft with a different story. There is no innovation...
EDIT: add another idea :)
If I had access to a space launch capability for less than $100/kg, however, I could bootstrap the whole business from my basement with an investment of ~$100-200k from some friends. 
From SpaceX's perspective, they can put ~5 tons in lunar orbit for a cost of $200k in fuel . $40/kg is great, but it's not what they charge their customers, and it's not what they'd charge me - demand from comsat operators with a much higher willingness to pay means that I have no access to the market, and SpaceX needs to make a profit.
Give it 10-50 years, and I'd expect real asteroid mining will become economically viable. 
 assuming zero NRE for mining robot fabrication and a single person salary.
 ignoring actual launch costs, personnel salaries, and assuming the whole booster stack is paid for through infinite perfect recovery.
 see also Planetary Resources, and why they should be in hibernation mode, not burning $2m/year developing camera sats. but hey, VCs have money to burn.
The idea is that people get a "bubble" but that when people vote, hopefully they take into account both quality and how similar the post is to their own. So people get a better version of their own views, which hopefully also allows them to see similar but non-identical views.
You can see that sites like reddit which tend to have high quality posts, but many subreddis have very strong biases as well. Letting people live in their own bubble means that people can write the best quality posts they can without worrying if their bias matches the subreddit they are writing in.
Step 1: My wife and I both download an app.
Step 2: We link our accounts.
Step 3: We each find and read articles in the app, Pocket-style.
When done with an article, swipe right if I think my wife should read it. Swipe left if I don't want to pass it on.
Step 4: Open the queue of articles that my wife thinks I should read. Read them. Swipe right if I want to chat about it with her. Swipe left if I don't.
Step 5: On the weekends, as we're going for our walk, talk about the articles we both found intellectually stimulating.
Here is an outline of the technical requirements and how they could be achieved.
I couldn't build it because I a) lack hardware expertise to figure out tricks to navigate without GPS or/and map buildings and b) never figured out a realistic GTM for this.
But what about proof assistants? It struck me that using a proof assistant to guide the theorem prover inside a partial evaluator offers an opportunity to repartition the coding task. The idea of "end user programming" always fails because we cannot sufficiently separate the idea of a program that serves as specification (here is what we want done, its a shame that this specification isn't really runable because the implied algorithm is too inefficient (think about PROLOG, where a naive program may well be logically correct, but backtracks itself an exponential runtime)) and a program that describes a tolerably efficient algorithm. The poor end user has enough trouble with writing code that specifies the computation correctly without worrying about computer-sciencey stuff about how the computer should actually go about computing it.
If only there was some way the person rewriting the code to make it go fast could do so at one remove. He works with the end user programmer first time through, but subsequent revisions by the end user get rewritten automatically...
This was the vision I tried to articulate in https://groups.google.com/d/msg/comp.lang.lisp/5p8oVP5dGbU/V...but my health has failed and I've not got any further forward :-(
A polished, credible implementation of that would mark the beginning of a new marketplace centered on agent services that prey on existing Web companies and tear open their data silos and adtech, one user at a time.
But what ultimately stops me from further consideration is that the level of AI know-how needed to do this is not a commodity at this time - you'd need a full team of top talent, and it probably wouldn't be cheap/fast/customizable/secure enough for users if done now. I think it will happen though, the signs of it happening are gradually emerging, and when it does, watch out!
My single friend tells me of dissapointing dates where the profile photos are years old. She especially dislikes guys who lie about their age to date women in their 20's.
On the service-end, it would have basically been an Apache Spark instance doing collaborative filtering as data comes in. It seemed like a pretty sweet idea, but I couldn't find the time to work on it.
If this seems like a cool idea, you should definitely steal it and start working on it.
Related to this -- I wrote a blog post about a lot of my random ideas I haven't finished and why you should steal them. Complete list and blog post here: https://kristianfreeman.com/post/steal/
In more detail, an innocuous autonomous droid that reminds me of meetings and takes me to the right location. Intelligent enough to correct for diversions to the wc or coffee machine, and stay out from under foot.
Note that this is partly independent from speech recognition. Perhaps speech could be translated to a string of word alternatives with probabilities, and language understanding gives a hint which alternatives make more sense.
In other words, language understanding could help speech recognition.
Can be used for announcements, notifications, 2-way comms etc.
1/ So the idea I haven't done is build a hacker search engine. I'm not sure what this would look like, but I'd bet being able to search through source code at high/low levels might be interesting.
2/ Another idea is I noted on the the Amazon/NES classic thread, arbitrage by Amazon/users resulting in instant sellout. Could this idea be used somehow?
Some news organizations will have their own staff checking results, especially in areas where it is known that the results will be slow and the results are going to be within polling error margins.
You'd think the data could be crowd-sourced more effectively, but private citizens get the data more slowly for a few reasons ... First is that there is red tape involved in obtaining the data (i.e. forms to fill out, fees to pay and it all must be done ahead of time) and second is that after-hours early access to data is just plain limited logistically. If it could be efficiently delivered to a large quantity of people, it would be presented online.
There are a few areas where the government decides that it's more efficient to let private parties distribute data, and it's generally pretty good business to become one of those parties. NMVTIS data comes to mind immediately (carfax and it's competitors), but there are many similar instances.
"Shortly before the polls close, over 4,000 stringers report to county election centers. When the first polls close, theyll be ready to start phoning in the raw vote as it is reported by the counties. Theyll place their calls to AP election centers around the country.
At the centers, a total of over 800 vote entry clerks will answer those calls, and walk each stringer through a dialogue as they enter the number of precincts reporting and the candidates votes into our election night system. "
They pay $50 for someone to go to the county and report the election results. There's an iphone, android, and mobile web site, as well as a call center that takes that input.
Honestly, it was a really fun evening in the middle of nowhere Ohio...
Disclaimer: I work in philly's city government. It's really cool, and we'll soon be hiring a product manager (for beta.phila.gov), a data engineer (for open data), and a front-end/wordpress developer.
In Illinois I registered to vote well before the deadline. I showed up to cast my ballot but my name wasn't in the "database." The folks managing the polling station had to manually re-enter all my details into an Android tablet. While this was happening, I took out my phone and scanned the WiFi network of the church I was in. I assume the tablets were connected via wifi. I saw no other connection to the tablet besides a power connection. To my surprised the WIFI was running WEP. Hmm, this day in age you would think WEP would be default=off. This was at a local Church too. So perhaps the tablets use cellular data plans?
They get all my PII data entered, I get my ballot, fill it out, and pass it through a machine. The machine is in the corner of the building in a large box so I can't tell if it's hardwired to some network or using the wifi.
Later that day (about an hour later after re-entering my details into the Android tablet) I went to the Illinois voter registration web site to look up my name and I can find my details.
Anyone have any information on the tablet software? Who writes it? How it's transmitted and stored? What about the electronic ballot counting machines? Are the phoning home some where?
The whole setup seems sketchy to me.
As an aside: I know a couple people who have homes in different states and claim they can cast multiple votes by driving/flying to the state where they have 2nd home to cast a 2nd ballot.
In the UK at least we aren't meant to release the results until the returning officer reads them out so waiting for any of the above while showing a live feed of a result would mean we don't have the result to show on screen immediately. For this reason you would likely also have people in the studio watching the live feeds from counts and entering the numbers which would then be double checked against the official feed later. This can be tricky when the result is drowned out by cheering from a crowd of supporters! ie "Labout party, John Candidate 22 thousand... <WOOOOOO - YEAAAH> ...hundred and 1 votes"
The focus for news orgs is getting these results out accurately before their competitors, no one wants to be slow to announce the results.
In addition to all those, there is Oy ve Otesi, a non-profit does the entire thing with only volunteer work. Their coverage is pretty minimal in rural areas, though.
We transfer and process them, for national races we we the AP Election API
basically it says it is based on exit poll. and it is costly, so many media companies formed an entity called NationalElection Pool to do the report.
And they also hired a company called Edison Research to do the exit poll.
This is, for want of better phrasing, the rat race, and quickly being swapped out for better work-life balance, increasingly being lambasted, and seen as generally not ideal for more and more people.
Burnout is such a catch-all term these days and is usually a word associated with the more negative aspects of 9 to 5 culture. It's not a word in the vocabulary of high-performing people. High performance is not especial to 9 to 5 culture, or especial to those who have grit. High performance can be seen in unpaid work, or in work that feels more like work, simply because, there are different types of work, like body work, mind work, etc
Two years ago, tried to take vacations, did some sport (this one somehow helped, but not as much as i needed, and couldn't get motivated to do my best). I ultimately took a month leave and took my old student job, summer camp counselor, for two week. It worked.Around last month, i felt the same, but couldn't take a long leave. My father (film set designer/decorator/constructor) was working on the set of a feature movie. i took four days (long weekend) to help him. Woke up every day at seven, did some woodwork, put some wallpaper, nailed/screwed some planks, went to secondhand market/junk shop with him, carried old furniture from there. I honestly don't know if it's the work i did or the fact that did it with my father, but it has been i long time i never felt this good.So my advice: find a work you can do that's time consuming, physical, that you find meaningful, and do it with someone you like spending your time with. Maybe juste one of these will suffice, i really don't know.For the last question, in my experience, it's both.
1. Time off (2-10 days usually), but it is mainly dedicated time away from computer/phone/electronic devices. Allow yourself only a very small time each day to check in on friends etc via social media or whatever, but otherwise put the electronics down and lock them up.
2. Do something active. The key here is physical activity, ride your bike, hike, swim or whatever you can do physically. Sometimes this is the hardest thing to do because when I get focused my exercise and outside time seems to be minimal and so getting motivated is the hardest thing, but after forcing myself 1-2 times it quickly becomes easier.
3. Get outside in the sun. Soak up some sun (safely of course), but get your body to reboot itself with some good ole Sun exposure.
4. Get some solid rest, take melatonin and Benadryl (to start) if needed, but get good rest. I have had to do take Benadryl the first couple of nights to get myself to sleep at a reasonable hour in the past (otherwise my brain racing keeps me awake), it just helped me kick start some rest.
Overall, the biggest thing is to distract your mind with physical activity and let your body refocus and reboot. Then try to keep this up at least 1-2 times a week and you will stay further away from burnout.
There came a point where I realized that if my work requires me to be drawing from my well of creativity, I have to make a _daily_ habit of replenishing it with inspiration so I have enough left for tomorrow.
Things that inspire me to write CSS are things like listening to new music, cooking a dinner, watching funny things on YouTube, and exploring my city on foot.
Try to make a daily habit if replenishing your well with the things that inspire you and it will really help make sure you have plenty of creativity to draw on as you need it :)
With a little bit of conscious effort, we can channel burnout into helping our betterment. Try to accept that it is a normal reaction of your self trying to tell you something. Calm down a bit and try to work through your feelings. What is causing the depressing feeling? The lack of structure? Uncertainty of a problem? Lack of recognition? Workplace environment? Very little social interactions?
If you can isolate the problem, you can look for fixes. I believe everyone in the tech industry burns out once in a while. It is often indicative of a lack of balance somewhere. The trick is to, with time and practice, learn the triggers and symptoms of an approaching burnout. Then, you can address the issue before it grows into a full-fledged problem.
How much are you sleeping each night? How well are you eating? How clear are your goals at work and how much do you able to progress along them? How much time are you spending with people who care about you and rejuvenate you?
We got our mom a computer, a cheap one, and told her to play with it. Break it. Click everywhere.
Soon enough she was playing with windows settings. Soon enough nothing worked. She now knew you can brick computer, she is more careful.
We fixed the computer and she explored the internet. She asked how she could download wallpapers, we introduced her to torrents and file sharing. She got viruses. She learned that you can get virus online and they will delete your hard worked wallpaper collection. She is aware of the dangers of the internet now.
For a while you would download all the free adblockers, anti-virus, etc., she could find and put them on CDs. She learned to clean her own computer.
Right now she is very comfortable with computers and it allows her to have more freedom. She will easily connect with people online, like we do here. I'm certain it has helped her keeping smart.
She even feel out pain now. Whenever one of her neighbours lady has issues with computers they call her.
I got a Dell Chromebook for my mother.
It's nigh on unbreakable, and is great for non-tech parents. Each tab/app runs in its own sandbox, and it allows them to do the things they want (i.e. browsing).
It automatically updates in the background (none of that Windows update rubbish), it has inbuilt malware block lists (via Chrome Safe Browsing), it's fast, doesn't bog down over time etc.
Even if by some magic they brick it, a simple Powerwash (https://support.google.com/chromebook/answer/183084?hl=en) and 5 minutes later, it will be back to a pristine state, they log in with their Google account, and it pulls down their settings again.
Also, if you want to see the latest and greatest coming in ChromeOS - try the Canary channel =). (But be prepared for rough edges).
Feel free to ask any questions.
You don't want to have to support them using a new OS for the first time - you'll be in for a headache. I use Deepfreeze for anyone who is a "problem user" and most don't even realize they have it if it's set up right.
...but to answer your question perhaps you can get your parents a Chromebook? I'm not sure what photo editing options exist on the platform, but hopefully it's an obscure enough platform to avoid the majority of malware.
Everyone loves to recommend Chromebooks to older/less digitally literate people, and they're right to do so in most situations. However Chromebooks have one huge downside that makes them non-starters for some of that demographic: Printing is a no-go.
And don't tell me about "Google Cloud Print." Cloud Printing requires a PC or Mac connected to the printer and a copy of the Chrome browser running. In this scenario we're trying to replace a PC or Mac, not add to them, so Google Cloud Print is a non-starter.
Ultimately people who quickly jump on the Chromebook recommendation need to find out first if printing, even rarely, is a requirement. For a lot of people I've tried to move over to a Chromebook, it has been the single thing that killed the entire project.
Printing in general is a huge hole in Chromebook's offering.
I had more or less the same issue (except things still booted) with my parents about 5 or 6 years ago. In a move I thought was insane, I put them on Xubuntu. I moved them to Mint for a while, but they are back to Xubuntu. It's my preferred distro, and the Ubuntu base (for good support) and XFCE (Windows familiarity) made me comfortable it was Mom and Dad proof. Aside from showing them where things are, there have been zero problems. Turns out that Linux is just as good for email, web browsing, Youtube, and solitare.
I haven't used Lightroom, but how does (say) RawTherapee compare?
I've had no tech support calls for a couple of years now.
I think a chromebook is a good option if a keyboard is required.
It's a losing battle at this point. Your time is better spent educating them against social engineering attacks (I'm still afraid my mom is going to return a call to the voicemail the "IRS" left)
My father complained of virus and malwares on his computer.
I came home, formatted his hard drive and re-installed windows.
I go to eat lunch with my mother in the kitchen, a few minutes later I hear "[baby], I have a virus on my computer!". WHAT?
The first thing he did was to google for "chrome" on internet explorer and use the first result. The first result is a google ads for a malware containing chrome. Had to reformat his computer one more time. I think that's the moment where he got it.
Cheap, keeps itself up to date, fully cloud based.
It wouldn't tick the Lightroom box but it does the internet based stuff extremely well with low maintenance.
I had an "oh shit" moment when my mom described a website that added automated popups over a text editor field -- as she typed it would periodically throw up a pop up with encouraging commentary and editing advice "good idea, can you elaborate" etc -- and it took her a long time to realize that the intellectual/emotional support she was feeling wasn't actually coming from anywhere ... she also got severely addicted to the political campaigns and facebook -- and ended up with a news feed that absolutely barraged her with a constant stream of fake political news stories ... got her down from her 4-6 hours per day of internet usage but it was so fast -- really scary stuff.
I think you need to explain to them that the Internet is too much like the Wild West, and they need to stick to trusted web sites, as their "sight" is not tuned to see the dangers. Leaving them too scared to randomly surf might not be a bad thing, in this situation. I have the same type of situation with my 85 year old mother. She is somewhat tech savvy, but not enough. Her browser has every possible 3rd party toolbar, no matter how much I educate her on the situation...
Show him one of those videos with deep-sea fish that use a luminescent lure to eat smaller fish. The pop-up is the lure. The small fish is him. The Internet is like the deep sea, and it's full of lures like that.
One simple criterion I give non-technical people: if it's unsolicited, it's hostile. End of story. No exceptions.
Nearly every time it takes me hours if not days to do a bunch of scans, install updates and purge whatever garbage has been installed by various malware that she's somehow managed to find. I've done more than a few clean wipes, bought her new machines and yet still she figures out how to kill it again. Most of the time it's caused by her playing some silly online puzzle game, or clicking a link in an email or some sort of fake notification... or AOL, which she refuses to ditch even though it's a huge vector.
It's been decades and she still hasn't learned how to avoid this stuff correctly. I've tried every malware scanner & notification software on the market, and each one of them is eventually bypassed by clever malware or in some cases like AVG or Norton, BECOMES the friggin problem.
Basically, my conclusion is if your parent has a problem like this the only solution is refuse to help them anymore if they insist on using Windows as their primary web device and make them get a Mac and/or an iPad, maybe a Chromebook as others suggested. Then get rid of the Windows PC or simply tell them not to use it for anything other than printing / scanning etc. There is no winning otherwise. Windows for some folks is just plain bad news
-Setup a network and computers that I can admin remotely. Probably Ubiquiti Unifi gear (great wifi APs, powerful router with DPI / firewall, where I have admin access from my Unifi Controller install. Then I could handle all network troubleshooting remotely, unless their ISP is down or hardware has physically failed (unlikely with the ubiquiti gear)
-Look at something like OpenDNS personal configured on the gateway to help protect against malicious stuff in browser
-Set up any Desktop PC to run a hypervisor, and keep the OS they use as a VM that I could access and administer remotely, and that I could quickly reset to a known-working state.
-Have them use gdrive / dropbox / onedrive to keep documents backed up and accessible across machines
-For laptop / portable, see if I could get them to use chromebooks, or I'd need to replicate the VM setup from the desktop PCs
So I started a free service http://www.littlecaution.org/ where I do talks and seminars about remaining safe online. Since it's just me on my personal time for now doing the workshops, growth and reach is slow. But I continue to work on it.
My belief is that using the right tools is of great importance but raising awareness is a bigger need. All the best tools are no match against human fallibility. So in these talks, the direction I take is about knowing the issues, being aware, and then followed by using the right tools.
the xfce4 GUI is close enough to traditional windows98/windows2000/winXP models that most older non technical users have no problem with it.
the best thing for non technical users/older users/ignorant users is to give them the closest approximation to a thin terminal web browser, whether it is a linux desktop or a chromebook type thing.
Revoke local admin privileges. It will stop a lot of the click-click to install bullshit, but it also means you will get a lot of calls about "access denied" whenever they want to update an app that needs admin rights. Give them an admin account to install/update software separate from their normal account.
Simplify the device by going tablet/chromebook. Probably means you will get a lot of questions regarding how to use/setup the new OS.
Shorten the loop on backup/rebuild and let them hit the iceberg. Good backups and fast imaging with drivers pre-loaded can make cleanup a lot easier/faster.
2) Chrome + uBlock Origin w/ Malware filters.
3) Sophos Home which has the bonus feature of being cloud-managed and not providing any control to the local interactive user.
4) Sophos XG Firewall Home Edition on whatever $100-ish hardware the pFense crowd is currently in love with. Web filtering for Advertising and Threats, AV scanning.
 https://www.sophos.com/lp/sophos-home.aspx https://www.sophos.com/en-us/products/free-tools/sophos-xg-f...
removed her user's admin privileges
install flashblock - one of the ones where you have to click on the video to make it run
spent a long time explaining that you will never be chosen to win something, MS support never rings you to tell you have a virus, if something takes over the whole screen and tells you anything suspicious/implausible to press alt+f4
convinced her free music isnt worth the risk of downloading something that trashes the machine. installed spotify
Of course, in this case we're trying to protect people from themselves rather than the outside world, but still...
If there's that Just One Piece of Windows software he needs, do try it in Wine - Wine works more often than not these days.
I never did viscerally understand how literally 25% of Windows XP installations could be botnet members until I saw my sister's computer in 2010. Oh my goodness. The disk was full because they never emptied the rubbish bin. And I don't think there's ever been a piece of crapware that my brother-in-law didn't download to try. The only thing saving them was that they were still on dialup. They're on broadband now (it turns out the killer use case for videophones is our mother Skypeing her grandchildren), and I shudder to think what it's like. Normal people do not use computers like we do.
I bought the cheap one (Lenovo) sometime ago. It has a good battery life, very lightweight and compact. I have seen the same being used by many people (in the same category). It is the most trouble free and productive piece of material there is. Ignore all these security software and Linux etc. Just hookup uBlock and Ghostery into the user's Google Chrome account and you're done.
I have this exact problem with several family members PCs who come to me regularly with messed up machines.
It's not just old people either. One problem person for me is a 10 year old who always insists that all he downloaded was just that one minecraft mod and it was definitely a safe mod, honest, because he downloaded found it on google, or he saw stampy using it on youtube, oh and a java update because the mod says it needed it, oh and forge, and optifine, and, and, and... He's loosely tech savvy, but in a way that doesn't make him any safer, he still gets his computer into a mess. He's not going to switch to a Chromebook. No minecraft, and none of the other games his peers are into. (On a related note, the minecraft modding community is one of the most vile den of scam-mongery I've ever had the misfortune to stumble into)
The older people all require MS Word/Excel (And don't tell me LibreOffice is a replacement, it's not even close if you expect file compatibility with other people who use MS products).
Windows only plugins for specific websites, that's another one that is hopefully getting much rarer, but I still do see from time to time.
I've tried setting up restricted accounts and keeping the admin account password secret, but it always eventually has to get given out. Last time it was because their son needed to do submit his homework on the schools website, but the submission processes required a Windows only plugin which needed admin access to install. They were all panicked because I hadn't been answering my phone and his homework was due the next day. After that I gave up and stopped using restricted accounts.
I've tried disk imaging software, but it's typically a lot more work than it's worth with the images quickly getting out of date and needing redoing with new versions constantly.
This is a big big problem that I just don't have a good solution for.
While I agree a chromebook won't get owned your parents will still likely get phished. I have no idea how to solve that.
0) Deny them admin rights to the machine.1) Create a second profile for each of them2) Write a quick batch or PowerShell script to copy the contents of their Desktop, Documents, Favorites, Pictures, Music, and Vidoes folders (not the entire profile) from their profile to the second profile you created for each of them. Make sure your script only copies new or changed items (so it runs faster) Store this script outside of either profile.3) Schedule the script to run every hour on the hour.4) In the event that they brick their profile with adware, malware, etc, simply login as an administrator, delete the first profile, rename the second profile to whatever the first one was called and then create a backup profile with the same username that the previous backup profile had (so you don't have to edit your script).
Notes:For your script if you are more comfortable with batch scripting then use "Robocopy". If you are more comfortable with PowerShell use "copy-item".I cannot stress enough how important it is that you ONLY copy the folders I mentioned above. If you get lazy and copy the entire profile you will bring over the folders viruses, adware, and malware hide in (like AppData).For the love of God make sure you have up to date antivirus on the machine. That's so basic that I didn't mention it above but I feel compelled to do so here. If you don't want to spend money just install Security Essentials or AVG.
1) Install GNU/Linux, most click adds target windows users.
2) Install an ad-blocker at DNS level. I use a custom variation of this: https://pi-hole.net/ (by default logs DNS requests, mind you. You can disable logging though).
3) Spent some time to educate him on what to avoid online
4) Lastly, I have an RPi running on a VPN exit node (actually I have an RPi cluster, but anyway). When I had an openWRT-based router, I had a script which was fetching porn/torrents/etc. IP addresses and adding routes to the router redirecting connections via VPN.
5) A separate guest network with radius accounting can go a long way into securing your network and help control access (I have a radius RPi server but my APs do not support accounting. I felt kinda screwed when I realised)
Ultimately, they're adults, and the last thing your father will want is to be treated like a child on his own machine. If he fucks something up, fix it, and tell him what he can do to not have that issue come up again.
1) Create a user account in Windows that is NOT an administrator account, that way they can't install things without an admin username and password. The PCs admin account should be password protected.
2) Enable the highest level of windows alerts (those "this program wants to make changes or modifications to this PC, cancel or allow" messages). Teach your parents to always click no/cancel/do not allow.
3) Ad blockers like uBlock. Remove shortcuts to, or uninstall Internet Explorer.
4) Use software like DeepFreeze http://www.faronics.com/products/deep-freeze/standard/ it restores the computer to a snapshot you saved every time you restart it. No matter what they mess up or install or screw up, it'll be fixed with a restart.
Run him through the process of recovering downloaded files and you should be a lot safer.
* Remove the anti virus and tell him that you did so. It just gives a false sense of security and introduces more popups which teaches users to ignore prompts. If he knows it's not there he might be more careful.
* Install ublock origin. It blocks known badware domains and reduces the amount of clutter/ads on almost every web page you browse, making it easier for him to identify weird stuff.
Ideally for my mom ChromeOS device would be ideal. For my dad it would be not enough as it seems in your case. Maintaining my parents computer is something that always gets back to me. Now I am also living few hours worth of travel from them so it is even less convenient.
Older computer couldn't handle Ubuntu of the time. So always something was not working correctly. Updates on every system are constant source of headaches. My dad got used, but much more powerful machine. I installed Windows 10 for them thinking that Windows is now better and that with perpetual updates it will be out of trouble for me. I installed also Chrome Remote Desktop for service. My dad preferred Linux experience. I hoped that he just needs to get used to it. He was happy with Windows Store for a while, until few of the games he enjoyed playing failed in strange ways. It would not be that bad, but updates on Windows 10 are huge and with 20-30GB free space left after installation it does not update anymore. It only downloads the update, tries to update and fails - on every reboot. My dad bought an external HDD so probably it could be resolved. However he still would like to have Linux in there - old computer was very slow, but it did not fail in such magical ways. For now I plan to install Ubuntu for him and see how it will behave.
For my own learning experience and a bit of enjoyment I started working on my own Linux distribution. The most important thing for me is to have hassle-free updates like on Chromebook. I prepared squashfs image with Firefox and intend to have two partition scheme for rootfs. Updates would be then just download and restart away - completely automatic and in case of failure you would still have previous working image. I could test the image locally and optimize it for fun and profit. For now I base it on Gentoo to build lean system in a similar fashion to ChromeOS build.
If you have a recent Chromebook, they can run Android apps =):
I've since given up completely on locking down the computer or protecting them from themselves in that regard. I occasionally get talked into basic tech support, but thats it.
It's really a relationship problem if anything (IMO).
Btw, a chromebook does nothing to protect them against identify theft. Don't get them anything, better teach them what they might lose.
And thus your dad can't install any software he just downloaded from some random website. And the GNOME sofware center is great in Debian Stretch (to be released though, sorry).
create scripts using zenity as a GUI for youtube-dl (and any other command you wish him to run)
Also, I would recommend uBlock to Adblockplus.
Social engineering is a broad problem right now, and all you can really do is be prepared to pick up the pieces after the fact.
A small addition, how often do they need to install new software after initial setup? Maybe take away admin privileges?
* Drop linux on it with a simple GUI on it and lock the machine down. Don't give him root access or admin rights. Make sure the machine updates and backs itself up without intervention.* Set up his browsing inside a vm that gets recreated on boot (any host OS, linux as guest would be ideal but any will do).
Teach him how to use Linux. He can use Darktable instead of Lightroom.
Also, have a look at how suitable a Chromebook will be for his workflow (simpler to maintain from your perspective and harder to infect).
They'll only be able to do like, two things with it, but at least Google has tools that replace most office-type apps. I'm going to say Chromebook is the slower but simpler solution.
You cannot protect people from their own ignorance.
Front end: We use Ember because of its balanced focus on progress and stability. The team behind it is solid and batteries are included.
Application: Ruby/Rails, Elixir/Phoenix. Rails is great for getting up and running quickly, and your problems with #scale won't be on the application later. Elixir (really Erlang's BEAM) is great at quickly spinning up/down lightweight processes that handle raw data. So if you want to build a CRM and, say, manage emails, then it could be a good fit. Or if you want to process a 1,000,000 row CSV import, etc.
Database: Postgres. Binary JSON columns give you flexibility, plus PostGIS for all of your geospatial needs. Structure as much as possible to take advantage of the smart people who have spent countless hours building a world class database. You'll appreciate their focus on correctness.
My overarching advice: push everything as far down the stack as possible. If you can do it in Postgres, do so. Data correctness is your life; better that your DB throws a fit than your application serving bogus data.
Happy to answer any specific questions!
(And I wouldn't be a YC CEO if I didn't take the opportunity to mention that we're hiring! http://seneca.systems/careers)
Any stack will get the job done. Use the one that yields you a shippable product in the end.
My stack is ExpressJS, AngularJS, PostgreSQL, NGINX, DigitalOcean, Route53, PM2. And I fly through it.
I've been dealing with different CRMs recently (SFDC, Netsuite, MS Dynamics, AgileCRM) and I don't think tools really matter, architecture that will allow you to customize everything is the key for CRM
As my personal choice it would be (I'm a full-time Python dev)
* Java/C# (there's nothing really dynamic in crm, entities, fields, etc with different "name" and "display_name" for each customer, IDE would allow me to manage complexity)
* PostgreSQL (no NoSQL, CRM is all about relations)
* ElasticSearch (with Kafka for replication from db)
* RabbitMQ for offline jobs
For our team that would be Node.js with a React frontend, with probably MongoDB as the database, but every team is different.
As a side note: APIs are very important for CRMs, but as long as you design your API well you can swap out, move around, and refactor your backend as it makes sense.
The main parts are:
- type safety, in the hope that it speeds up development. TypeScript 2 is my main contender here.
- on demand module loading, so I can shrink the initial page loads, will go with Webpack 2, because it lets me use System.import() and automatically splits these imports into it's own files
- interaction flow control completely based on observables, because they compose nicely and with genertic types ease development quite a bit. Will go for Cycle.js (+xstream), because it's rather tiny and really everything there is an observable, data and UI, also it's written in TypeScript. Feels a bit like Angular2-lite.
- WebComponents based UI-widgets, because I think they should be independent from the rest of the application, don't know yet if I'd go for Skate.js or Polymer, maybe I'd even use custom components directly. But I like the Skate API much more than Polymer or the "native" API.
- data retrieval will be based on GraphQL with the hope that it will lower data-on-the-wire if the client has more control on that. I also hope that the GraphQL subscriptions (based on WebSockets) will integrate nicely with the observables. Apollo-Client is my fav here, it's framework independent and written in TypeScript, too. I'll probably use their GraphQL-server, too.
Every part is pretty much independent of each other (besides everything being written in TypeScript, haha) so I think I can use parts of it in future projects.
Right now, I lean more toward the integrated views than most of my fellow developers. Very few people would take an always/never position on single page apps, so this generally boils down more to how far people want to take them. Some are more eager to apply them in a wider range of scenarios than others.
One other thing - remember that it is relatively easy to expose a rails method as an API even in the absence of rails-api. My guess is that this is true of most integrated frameworks that provide a view tier. You won't be locked into an integrated app provided you keep logic out of those views! You should be doing that anyway. Also, make sure your tests don't rely exclusively on the views to verify logic that isn't in the view (again, you shouldn't be doing this, but I've seen it a-plenty). That'll keep you flexible enough to transition away should you want to at a later date.
It'll answer all technical questions, make it easier to hire, and make it easier to fundraise. Oh! And easier to get customers.
Then think about how people get info into your system - if its email, use Nylas (it's gonna be email to start). If it's voice, use Twilio. If it's directly, then abstract all the complexity and use the right terms for your market.
I don't work for Salesforce, I never have in the past, and I barely use it now. But choosing anything else is nuts.
If latter, I would probably choose vuejs/Play2/MongoDB. (Replace Play2 with RoR or Django or anything else).
3. Foundation for Rails
This is literally everything you need to get it off the ground as soon as possible.
This is what has helped me build Allt.in (https://allt.in) and UnderstandBetter (https://understandbetter.co/)
Starcounter (http://starcounter.com) is an in-memory application platform, which is comprised of an in-memory database (ACID-compliant) with a built-in app server.
You can compose a complex business system out of small apps (micro apps if you will). Apps don't pull the data from the db - they run in the db. Multiple apps that run in the same db share the data in real time. Our first clients are retail, CRM and advertising tech.
From dev perspective, we like to call our approach "collapsing the stack". There is no ORM. Your code classes become the database tables. You can use our (Web Components based) approach to create thin client HTML views that bind to the data using JSON Patch. This saves you from running huge amounts of glue code, which is typical for traditional software stacks.
Right now we are on Windows/C#. Linux and macOS is coming next year. Other languages will follow.
Edit: looking at what you already considered, maybe: back end: Ruby, front end: VueJS
I'm not sure how universal it is for CRM systems to be all about who knows whom, from where and what's the nature of the relationship, but the ones I've been involved with certainly all were.
On the backend, ASP.Net core is looking good to me. Although, Go and Elixir are picking up fast. Heck, ignore the haters and use Node if you want.
Finally, don't be scared to use something "old" like Java (EE or Spring) or even Rails (personally, I believe the whole performance fiasco is not as bad as you would think)
I've built the framework to a CRM (Python and Flask) and I wonder how it'd line up with your needs. I'm not currently using it, as it needs a bit more work, but I'd love to talk to you about your project.
If you're a profitable company with a sizeable userbase, just buy Salesforce. It's clunky, it's expensive, but you can find contractors really easily to make it do whatever it is you want. Or you can learn the Salesforce platform yourself and build your final CRM on top of that. Welcome to enterprise IT!
If you're a scrappy start-up, or non-profit, with a small number of people to serve, you can use whatever you're most comfortable with. A single database (perhaps with hot replica,) a single application server (perhaps with load balancing for good measure) and you have everything you need. Use whatever you already know. PHP and Bootstrap? Ruby and Rails? Node and Angular? Doesn't matter.
If I were in the middle area -- successful company, lots of customers, but not actually at the point where I need the Salesforce behind-covering and easy contractor access -- then I would probably use React for the front-end GUI, and Haskell with Warp for the back-end services, hosted on top of MySQL or Postgres, with Redis for data caching, plus some scripts to make creating bread-and-butter tables/indices/queries simpler and less repetitive.Like the poster above, I kind of like having an "escape column" for "annottation data" stored in JSON, although it can simply be a plain TEXT. As long as you don't need indexing, it makes adding new columns easy even if you have a table that's too big to change online.
NLTK is always a good starting point:http://www.nltk.org
I also wrote a 3-part article leveraging OpenNLP with Clojure:
If you're interesting in applying NLP without necessarily having theoretical background, wit.ai offers some really impressive features.
Course also offers a good course:
It would be helpful to have some background in Machine Learning. For a good introductory course with a mix of mathematical background, see https://see.stanford.edu/Course/CS229
NLP in the more modern systems is backed by deep neural nets. Here's a course on NLP using deep learning:https://www.youtube.com/playlist?list=PLIiVRB6G_w0i-uOoS6cDh...
You can also checkout https://github.com/vseloved/cl-nlp. It is an NLP toolkit in Common Lisp. Vsevolod the project owner is a great guy to work with. I had contributed with some minor bug fixes, tests, documentation more than a year back, hence the mention of Vsevolod.
You could also think on the alternative lines of contributing to an open source project in NLP and building an application on top of it. Talking to any such project owner for expected sample apps might help, as they can go into that project gallery and you get to level up your skills. Hope this helps.
I used pocketsphinx (trained with specially limited vocab) for speech to text, my own home grown Zork-esque parser for "understanding" the text and generating responses, and pico2wav for text to speech for the responses. That's described in a bit more detail here: https://scaryreasoner.wordpress.com/2016/05/14/speech-recogn...
- Coursera's old NLP course by Michael Collins, Columbia Univ. More of theory and concepts. It's discontinued now on coursera but the material is available at academictorrents. 
- NLP with Python and NLTK videos by sentdex . Mostly programming, but with useful nuggets of concepts introduced here and there.
 http://nltk.org http://nltk.org/book
I'd recommend starting with the Kaggle Bag of Words tutorial.
The classic NLP textbook is
* Jurafsky, Martin: "Speech and Language Processing" (https://web.stanford.edu/~jurafsky/slp3/) -- already mentioned here: a very solid overview textbook to give you an idea about the field;
Should you be interested in statistical NLP (even if it probably isn't as sexy as it used to be), the classic there is:
* Manning, Schtze: "Foundations of Statistical Natural Language Processing" (http://nlp.stanford.edu/fsnlp/).
It's relatively fast (after model load time) and quite feature-rich.
For eg., Betty  is quite an interesting project with both real-life use and practical NLP considerations, and is looking for new maintainers. (I'm not affiliated, just interested in NLP myself and have been itching to get into betty for some time.)
If you like thinking about game design, there's also the option of Interactive Fiction , NLP-involving ones are called parser-based fictions I believe. A recent FLOSS podcast episode with folks from the IF Tech Foundation was pretty interesting and illuminating regarding this area.
 https://github.com/pickhardt/betty http://iftechfoundation.org/frequently-asked-questions/
The NLTK approach may be dated, but it is easier to approach as an engineer, especially if this is a hobby. It will give you a good introduction to problems in the space.
The math heavy approaches may give better results long-term, but it will be a much longer time commitment, but this is probably more appropriate if you're trying to find a job.
You can also do interesting things with a small dataset and the free plans of APIs like Watson. E.g., I'm working on a search engine for standalone lectures - https://www.findlectures.com.
This is the textbook for the course: http://www.statmt.org/book/
It points to NLTK as the framework of choice, and has links to a couple MOOCs and tutorials.
Let the linguist design your first project. It should be something that they don't know how to solve, but have wanted to know.
Don't worry about if it is feasible. Go to local data meetups when you have enough exposure to form your first questions.
They are quick. This will give you an overview of classical NLP.
From there, you can dig more where you want.
Any chance of raising it out of grey-text territory?
You will probably never write a magic thousand lines of code for this. You'll probably have a far greater impact if you do a few simple things we should all be doing anyway:
* Turn off lights you aren't using.
* Turn your air conditioning up or down by a few degrees.
* Turn your water heater down a few degrees.
For computer-specific stuff:
* Don't leave computers running when not in use.
* Dim your displays.
* Use your laptop's battery rather than leaving it plugged in all the time.
I know it's not exactly interesting stuff, and it certainly doesn't build your CV, but neither of those things is actually important when it comes to climate change.
I reckon the only way to have any substantial impact is to influence others to change their behaviour / help drive political and economic change.
* our global economy needs further regulation to bake the cost of externalities (CO2 pollution) into the economy. Without a carbon tax or similar mechanism we get what we have today: polluting activities (on both supply / demand side) are effectively subsidised, so there is no incentive not to do them. We need to lobby for this.
* some in the climate movement talk about the "climate emergency" and want to phrase the response as some kind of world-war era national economic mobilisation. I think this makes sense, but this will only happen politically if a majority of the population think there is an emergency.
* someone else in the thread has already mentioned Jevons paradox - where improving the resource efficiency of a process in a market can result in an increase in overall consumption of the resource. Separately from that I think demand reduction should be a clear win. What can you do to reduce demand for energy?
As a developer, you can educate and help people conserve energy. Heating and cooling are enormous culprits. Learn to be comfortable at 60-65 in the winter, and 75-80 in the summer. Transportation is a big culprit as well. Buy a bicycle and use it for everything under 10 miles. Of course green technologies are helpful, and I don't mean to discount them, but the reality is that our cultural attitudes towards consumption are just as much of the problem.
To visually see what I mean, check out this graphic from the book: http://www.withouthotair.com/c18/page_109.shtmlThe red bar on the left represents a typical Britain's consumption (which, mind you, is statistically less than the typical American's). The green bar on the right represents the pie-in-the-sky most insanely optimistic output of all the green technologies. Like, if they covered the entire country in solar panels and surrounded it with windmills and tidal power. It's basically a completely unreasonable estimate of the top-end of green energy production, and it doesn't even match the consumption bar.
check out Bret Victor's essay "What can a technologist do about climate change?" if you haven't read it, it's very good:
Discussion on HN:
You can also stop buying products from most damaging companies 
Make it easier to model genetic engineering so we can produce crops with less use of the Haber-Bosch process.
Make public transit easier to use.
Make it easier for people to coordinate life without a car.
Make inexpensive FLIR cameras for people to find leaks in their home insulation. NOTE: if this becomes widespread, it will be legal for police to use those same devices to look into people's homes.
If you want to reduce climate change, I think you should just follow FroshKiller's advice. You might also evangelize solutions to the public and politicians that provide decent compromises with reduced pollutants. You should also pay campaign contributions to politicians most likely to do that as this counts more than ten thousand opinions from voters. These will collectively probably achieve nothing given industrial nations overall don't care about climate change vs money, jobs, and disposable goods. You'll at least be doing your part.
The man called out in response, "you are on the other side of the river!"
281 java positions, 182 c#, 91 c++
New ones coming in every day.
There is a lot of demand here for skilled developers, most positions are not for startups, but established business.
Software developer salary is typically lower than in the US, but then again, cost of living (as far as apartment rent goes(in Oslo)) is lower than in SV. C#/Java back-end salary usually range from 600,000 NOK (73 188 dollar, at the low end, not much experience, poor resume) to 1,000,000 NOK (121 980 dollar, senior).
The average developer salary in Oslo is at 106k (dollar). National average is 82k, most attractive jobs, and salaries, tend to be in Oslo.
I am an American living, working (as a freelance programmer) in Czech Republic -- good economy (especially Prague), low crime rate, low cost of living. Happy to answer questions.
Otherwise, apply for jobs in Norwegian startups through this site:
You can filter by location, we have a couple of positions in Provo, Utah as well...
For me, it's not worth moving. I was born here, and as a result I'm somewhat responsible for the actions my country takes as a whole. Moving doesn't change that. The grass looks greener on the other side, but other countries aren't really doing that well with human rights, LGBT issues, affordable housing, or constitutionally-protected free speech. No matter where you move, you're trading one bag of shit for another.
Ps: SanomaNL is hiring in the Netherlands (senior fronted/backend python but Golang is creeping up/devops): https://github.com/sanoma/jobs/blob/master/README.md
I'm French, long time ago as long as I was looking from France to work in the UK, about 9 out of 10 recruiters ignored me.
Once I landed in London and did the same search of jobs, interviews piled on me.
I'm not saying you can not find anything from remote and online, just saying it seems much much easier to find something once you are already in the country.
If you are interested in the startup scene, the best recruiters would probably be Talent Army
Just signup, get a call with a talent advocate so they know what you're looking for, and as soon as the next monday you're in. You will receive from 5 to 15 tailored job offers in less than 2 weeks. That's the easiest way around.
Germany is a rather good option for working abroad as getting a visa is pretty easy if you have a college degree and make a certain amount of money. They're pretty liberal about handing out something called the EU Blue Card. That's what I had when I was over there. You don't even need to do anything before you get there. All the paperwork happens when you're in the country. The trickiest part of the whole process is making sure you end up at a place when you get there that you can register at with the local government as you have to show your registration confirmation as part of the Blue Card process. If you can get registered and receive mail wherever you stay initially everything is pretty easy.
I am assuming however this is leaving the US for ... not-US locations
My suggestion would be to stay where you are, look for remote work opportunities that will give you the ability to losslessly change jobs until you found the work culture that suits.
And it also gives you opportunity to get involved in your local or state politics where you can make a genuine difference.
Just as Europe has a free-to-move labour force (for now!) the US has strong and increasingly independent States that look more and more like the engines of progressive change. California just approved marijuana for example.
Let the countries of the world deal with any changing trade and defence agreements. It's why they have diplomats.
NB - I am not meaning to be as patronising as I may be coming across
Easy Expat < This site contains international classified advertisements, discussion forums, and job listings for expatriates all over the world.
Very good for medium-long term consulting gigs in Europe
Specifically, this posts on working remotely from abroad, but most of the resources listed also have jobs in-person, too.
They will start you just about any Western Europe country on your first job / contract. After that rely on your network as agencies advertising there are not 1st tier in the supplier chain
Startup Jobs in Madrid here:www.jobsmad.com
Maybe this means civic tech organizations like Code for America that explicitly work on public sector projects. Maybe it means working for a political advocacy group like the EFF, or someone working on privacy-related projects to help protect our civil liberties. Either way, helping improve things domestically seems like a nobler option than running away.
It's relatively easy to Google for expat websites for any specific country. The salaries are generally lower, but so is the cost of housing.
Our company Smartly.io is also hiring. 3-year-old startup, 100 employees, 30+ engineers, profitable, some real scalability issues to be solved (already 200+ servers), and based in Helsinki. :)
We are focused on AI and deep learning, and we are hiring research scientists, research software engineers, devops engineers, etc.
Just signup, get a call with a talent advocate so they know what you're looking for, then you'll receive from 5 to 15 tailored job offers in less than 2 weeks. That's the easiest way around.
I moved here last year, as an internal transfer. It's been pretty good overall.
Also StackOverflow Jobs has a number of openings across whole world, many of them with salaries.
However some big companies with lazy HRs mainly put job offers on their own websites and nowhere else.
It only lists Tech job offers from companies willing to recruit internationally and to sponsor working visa if necessary. It's free. I co-created that website. Enjoy :)
We're also happy to support with relocation.
US is awful visa-wise, considering that much of the cap is filled up in a day by Indian body shops; ensuring thus that one can at best start in October, and set out on this magical journey 6-12 months ahead.
Check out our jobs board: app.vanhack.com/jobboard and shoot me an email with any questions: email@example.com
Please contact me (email in profile) if you're interested in moving out here.
Seriously, ask your social network contacts in the countries that interest you. Demand for good developers is high everywhere, odds are there are openings at their companies.
Don't just go and browse job offers on random websites, that's inefficient and a lot of good offers are not there anyway. Another option would be to subscribe to something like https://www.talent.io/. Or, if you know some, just get in touch with headhunters in the country. They often have very good offers nobody knows about.
Data under experimental conditions is still very valuable. The sample size need not be that big before it's useful when you're not having to guess at everything.
I learned a lot from them, he gives a methodology and some rules of thumbs for approaching DP problems, which I found very useful.
I had a bit of fun years ago writing search algorithms to find profitable trade routes in Eve online, from memory that was largely based on some strange variation of A*, perhaps you can find some entertaining application like that.
Worth also checking out out some operations research / combinatorial optimisation problems. E.g. one of the simplest problems to tackle with dynamic programming is knapsack.
If you learn linear programming there's also some combinatorial optimisation problems that can be tackled by integrating an LP solver with a custom dynamic programming algorithm. This can be used in a technique called "column generation" where in this context "column" in jargon for a decision variable. You start with an initial set of decision variables and do an LP solve, then get the dynamic programming algorithm to search to find a new variable that can produce a better solution (incorporating information about the prices of constraints from the LP dual solution). Then you plug that new variable (if there is one) as an additional decision variable in the optimisation problem and solve the resulting LP again, getting an improved solution. Then repeat with the new dual prices, iterate until you hit a fixed point. Is applicable for certain problems that can be modelled as LPs where there are very large numbers of decision variables (e.g. > millions) but only a sparse subset are non-zero in a good/optimal solution. I think the classic application of this approach is the "cutting stock" problem.
If you need to understand specific DP problems that are common in competitive programming and interviews, then you should check out Tushar's channel at Youtube
But I don't love it. Alan Kay is right, it's like building "an Egyptian pyramid with millions of bricks piled on top of each other, with no structural integrity, but just done by brute force and thousands of slaves". There's no elegance and no higher vision. It's an Asperger profession; smart but artless.
I would prefer, if I could retire, to make short films and maybe to write plays. But I can't retire yet. So I'll push stones. It pays well.
I enjoy coding and understanding how computer systems work, but I don't care for the constant changes in tools and techniques in certain domains of development. I'd rather practise with and improve my existing knowledge of a subject, instead of constantly playing catch-up with someone else's tools and workflow. I also don't care about waterfall, agile, scrum, kanban, scrumban or any other development methodology that I've missed. I hate that my job has me chained to a desk (sitting or standing) instead of being able to use my body. All of this makes me think that real-world software development doesn't really suit me.
I'm about six weeks into a new job after leaving a company I worked at for just over five years. Amongst many other reasons for leaving, I thought that a new environment would change how I felt about continuing a career in software development, but I'm not sure that it has. I'm aware of how lucky programmers have it, but I can't help feeling like I just want something else. Grass is always greener, etc.
What are the career options that allow one to work mostly by oneself in one-to-two week stretches without having to play the development workflow game with the daily standups and so on?
Sadly I'm not sure what I'd do if not programming, but music is a big interest and I'd considered teaching music.
tl;dr Woe is me ;)
I'm glad for the experience, though.
Going back to programming, here's what I figured out:
- I was working on stuff I didn't enjoy, with people I didn't particularly care about.
- I was taking on new work projects without any particular selection criteria.
- I wasn't thinking about the kinds of work that got me excited about programming and chasing it down.
So I recently nailed the first two back into place. I'm working closer to my values system rather than paychecks. In exchange, I'm just saving more money so I have more freedom.
Anyway, burnout is real. I thought I was done for sure and that my interest in programming and computers was a thing of the past. But that was just the burnout talking.
It helped to keep a journal during this time. Not a chronicle, but a thought-dump process in which I asked if my life was actually improving daily. That made it pretty quick to pinpoint my frustrations, as you can only write about the same pains a few times before you start to really zoom in on the causes and potential solutions.
Good luck to you, however it turns out.
I'd been working at the same job for about ten years, and I started to work on a different group that made the same product with a never technology. I hated that, I found it hard to work in that and I wasn't that productive. Also I had some burnout, some depression, and not much to look forward to...
Except for dancing. I had begun some years prior and I became somewhat good, and I even began to teach.
Then an offer came, resign from the job for money was offered to all, I accepted.
For about two years I just gave classes and worked as staff. Unfortunately the money was not enough.
Then I started helping on the dance school's webpage. The money wasn't enough yet.
So I got a programming job and resigned from most of my job in the dance school. I just teach one hour a week.
I really lost my dream job because of money and not being good enough earn enough to life with that.
Just like artists, the programmers, coders, developers all design and create new things that didn't exist before, and no 2 programs or applications or completely functioning code will be identical for anything other than a fizzbuzz type test.
So it is natural for the creatives to experience burnout and falsely interpret that as having lost interest in our craft / art. I went through this too at a fairly young stage in my career as I had accomplished a lot in 5 short years. I had the pedigree and training -- internship at Magnum Photos in New York -- so I tried being a War photographer like my Grandpa and traveled to Iraq in 2008. 1 week in there and I came running back. It was a fairly freaky experience.
You think you are there to document something big and consequential to the world and initially it is exhilarating leaving the cube and CRUD applications, but all it is for most part is an online newspaper or blog paying you a few $ per shot. Totally not work the risk. Plus the Radical Islamic Jihadis (ISIS) crossed a new line and started kidnapping and beheading journalists.
I also realized I didn't truly have the stomach for it. Imagine actually being on the scene at 1 of these photographs, and having the courage to shoot, only to find out the media (AP, Reuters) won't publish it. => http://www.theatlantic.com/international/archive/2014/08/the...( When Kenneth Jarecke photographed an Iraqi man burned alive, he thought it would change the way Americans saw the Gulf War. But the media wouldnt run the picture.)
Like someone else has stated here, we have it really cushy indeed. So don't get used to it and "itch" for something else. Just work on your side-projects, or learn a new language, or simply stop by to smell the roses and live a little.
Your passion will soon come gushing back and you'll start to wonder why you ever thought of leaving this creative, immensely satisfying craft in the 1st place!
When I'm outdoors and active, I am so much happier. If I am on a multi-day outdoor trip to hike or rock climb, I feel like a completely different person. This is especially true on long trips that last more than a week. I have much less stress. I smile compulsively, instead of baring my usual strained expression. I have more energy. You might think at first that is simply because I am on vacation and I don't have to think about work obligations, but when I am on a normal (non-outdoor) type of vacation, I don't get the same feeling at all. I think it has more to do with the outdoor environment and physical activity.
I recently met someone who works as a park ranger, and I became envious of her job. I would love to patrol the woods all day as a ranger, or to be a mail carrier walking from house to house. I make much more money as a programmer, but "money cannot buy happiness", and I wonder often if I should change course.
But I've never tried applying, because I have no retail experience, and my work experience is mostly as a lone-wolf remote developer or indie developer (also I'm middle-aged now). Always thought I'd be laughed out of the interview. But I still think one day I'd like to try.
Ironically, I took a semester off and took a contract gig for a few months to pay off some bills and save up some cash, and that turned into a full time job writing software in the public health sector. I never did return to finish the undergrad, and have doubts I ever will, as my career in software has been about as good as medicine would have been when you balance the ten extra years of earnings against a slightly higher salary. The only reason I'd do it now would be to pursue a masters in something interesting.
I think if I had it to do over again I'd have probably just stayed in the market a little longer and skipped out on the student loans. I loved biology and medicine but i'd love to not be paying off the student loans too.
The money will never be the same as working in tech, and you'll almost certainly have to scale back your lifestyle expectations. I still do remote freelance work in slower periods to keep cash-flow flowing, and to fund farm expansion as we grow.
Here's a fun video of my non-tech lifestyle: https://www.youtube.com/watch?v=fb0ur8cdOfY
More recently, I've been applying my past development experience to farming automation using Raspberry Pi's. I built an automated greenhouse controller last year and this year am working on a device to automatically mix and dispense milk replacer for all of the goat kids we have born each year. (You can of course purchase commercial versions of the projects, but it was a fun application of programming, while learning about the RPi and automation, which I'd never done before.)
For me, I can't do anything else. I'm sure I could learn something else, and I certainly get burned out from time to time. However, I find the whole development process fascinating, I still get a kick out of solving the puzzles and making things work, I am deeply gratified to see something I made help someone else solve one of their problems, and code is affecting more and more of the population for better and worse. There's no place I'd rather be.
There's a scene in 'Heat' where De Niro's criminal and Pacino's cop characters are talking about why they do what they do over a cup of coffee at a diner, and it turns out they're both compelled and couldn't do anything but what they do. I'm not sure what I'll do when the Butlerian jihadists or the twenty-something Angular developers come for me, and I have to go find something else to do, but I think I'll keep at it until then.
Luckily there is still a lot of use from my old skill set, and I suspect there will be more as time goes on.
I started by dabbling in teaching:
- Mentored some high school robotics teams in the evenings- Taught night school / weekend classes as adjunct faculty at local universities- Shifted my day job from developer to developer advocate
And then a few months ago I took the plunge... sort of. I went on sabbatical for a semester to teach CS 101 full time at a small university across the country.
It's been a great experience, but it made me realize how much I miss programming. I really miss the intellectual growth that I get from working with professional software developers. I suspect I'll resolve the conflict by going part time in my day job, and picking up more classes as an adjunct.
I think you should experience how horrible 99% of all other jobs are. Then you will truly appreciate what you have.
Programming and computer research went back to being a pure passion. And I haven't looked back since.
- Programming is boring after a number of years - Programming is more of an art-form rather than engineering - Entry barrier for programming is low, so you dont have to be an engineer to do programming - Your programming skills plateau after a certain age - Your engineering mindset will be lost if continued in certain type of programming jobs.
Trust me, even compared to other white collar jobs, you would not believe how cushy we have it.
Though OP hasn't asked for the following here goes, I feel the IT field has a lot of people wanting to change career paths, more than any other field because of the following:
1. Programming is an art, if not done right and assuming the product is in continuous development, will come back to bite you in the rectum like there's no tomorrow.
2. 99 percent of the industry is about shoving products out without any care for proper architecture or refactoring of any sort. Result -> feature addition/ bug fix times grow exponentially with time.
3. The IT field has no concept of overtime pay
4. 1 + 2 + 3 => loads of burnt out devs :-> people wanting to switch jobs regardless of how high paying programming can be
Sounds like an insane idea, but as a Buddhist that would be a fulfilled life for me.
Ask them about their day, they just saved lives - heart surgery, brain surgery, trauma stabilization in ER, just saw a toddler through cancer treatment, and so on and so forth.
What did I do? Oh, I wrote code.
I've thought about teaching (programming) too. My dad is a retired professor, and I entertain no delusions of present-day teaching careers being anything like those of his generation. Still, there's something appealing about even just teaching as an adjunct once I no longer really need the money.
As others have said programming is probably the lesser of all evils compared to other jobs though. I don't think there is any other profession where I could so easily get paid as much as I do, and work from pretty much anywhere on the planet.
My mid-term goal is financial independence. I'm 28 and should achieve that in the next few years (I'll probably take short-term contracts and then a big break between rather than quitting completely). I don't really have any other hobbies, so I'm not sure what I'll do then though. I wouldn't mind going back to university to study physics.
About a year ago, I started portrait photography semi-profesisonally. I really enjoy photography but didn't enjoy the business aspect of it. And it was hard to coordinate with clients when you have a fulltime job.
A few years ago, I got serious about fiction writing, wrote a lot but could not write anything that I felt was good enough for anyone to see.
Now I am just focused on programming and enjoy photogrpahy when I have free time.
Trouble is, it does not pay the bills. I'm currently working very hard to pay off all my debt and once that's done I'll be taking up writing full time and leaving the tech industry behind.
I have learnt a lot of concepts by learning programming that can be applied to many real world problems as well.
I desperately want to work in Renewable energy sector like Solar, Wind.
And the best part, my idol, Elon Musky Musk has applied the concepts that we programmers deal with in day-to-day life to producing machines that produce machines that are currently some of the best solutions to the problems like Global Warming, Energy storage & Electric cars manufacturing etc.
This part really gives me kicks. Even though, I think about leaving programming may be in 10 years(I'm currently 24), but the concepts I learnt are going to come in super-handy what ever Engineering things I'd like to do.
That said I'm a sysadmin rather than a programmer, and I have no immediate plans to change.
One thing I would not do is become a photographer; that's my hobby (well that and rock-climbing / gyming), and I've seen too many people be burned by trying to become professionals. I charge money to shoot old ladies, hookers, and pets. But having to make a living from it would change how I viewed the subject and not in a good way.
There are so many people performing repetitive tasks who could benefit greatly from relatively small optimizations. I would be able to directly witness the impact of my work and make a difference on a personal level. It's hard to do this in software because the landscape changes so quickly.
It would also be super fun to practice apprentice-style learning in multiple fields and document/share everything.
Programming being very often about solving business needs, sometime in your career, you might be in a position to realize that it could make sense to go higher up the chain and build a company.
I grew up with my father being a machinist, and eventually going on to being a QA specialist for a large defense contractor, so I've be lucky enough to be able to learn a lot when it comes to machining and designing. Spitting out a 3D design from a printer is really cool, but nothing beats slapping a chunk of steel into a Bridgeport and ending up with a precisely-milled widget.
My wife is also an engineer at one of the largest (probably largest) physical testing companies in the world, and got her Chemical Engineering degree as well. There's constantly stuff she's telling me about, problems at work, custom things she's doing, and we get pretty deep into conversation sometimes about how to best solve the problems.
The money just isn't there compared to being a software engineer, but like a lot of people have said in this thread, maybe this is just a "grass is greener" thing: these problems that I can't work on just seem that more tantalizing than being the person who is actually dealing with a backlog of them. Vacationing in other people's jobs is fun and easy, and ignores actually being that employee.
On top of that I think I'd like to own a cafe or roast coffee or something.
But ultimately I got into development work because I was so motivated that the time it took to build experience on my own came easy. And doing the work day in and day out comes _pretty_ easy as well.
Though of course sometimes your interest wanes a little. But I know that it's a lot more satisfying than any job I've ever had. And I haven't thought much about others that I hear about.
In addition to that I just honestly don't think I'd make as much money anywhere else. So as long as I'm into it and it's the best place to make money, I don't see why I wouldn't keep at it.
I just hope I can try to do my other interests in my off time, which over time has become a lot harder than it felt previously.
A lot of my most compelling business ideas I've ever come up with haven't been apps or anything I could start programming right away, but rather have been totally different brick and mortar retail businesses. Opening a retail business is something I've thought about doing for a while, but I looked into some of the details and was somewhat turned off by the extremely high startup costs. I simply wouldn't be able to afford it without some partners.
One of my largest interests nowadays isn't software, but rather cities and urban planning. The idea of designing city features that would have a real, dramatic impact on people's every day lives is really compelling to me. I've thought about taking a break from software and working in this area, but at this point I really don't know if going back to school for this stuff is worth it at all. It's unfortunate that I hadn't discovered I was so interested in this topic when I was in highschool or early university.
That said, I wouldn't mind writing about programming, but I can't afford to stop my day job.
Maybe also a series of primers: CORS, React, ES6, CSS, 60fps animation/UI on the web, web accessibility...
Problem is it's hard to sell myself to an employer with no degree, no job experience, no portfolio of projects done using the fashionable tech that is in high demand (and which I have no personal interest in). At this point I'm at a crossroads, but the best way forward seems to be to start building my own business. Of course, there are plenty of unknown intersections ahead in going that route, and I have no prior experience from running a business, so where I end up is one big question mark.
I actually have a degree in molecular biology and have transitioned to computer science and an engineering degree, which I think was the right choice for me. I thoroughly enjoy being an engineer but lately I can't help but being drawn towards the arts - music in my case. I have been eye-balling a music academy that offers a state accredited professional guitar degree. According to their information material, their alums are quite sought after because of the hands-on approach, studio skills, etc. I looked at the requirements for admission and I am pretty sure I can get admitted with some preparation, having played on and off for quite a few years now.
The catch here is that music industry is actual shit to work in, as I have heard on multiple occasions. And I cannot afford making less than a certain amount of $$ because I have to/want to provide for my wife and two kids.
On the other hand I started having the (completely irrational) fear of being a complete failure if I don't become a professional guitarist.
I'm still in touch with my programming side through my side projects but the experience I gained through my software development years have been extremely helpful both in dealing with business & technical audiences as well as in solving problems logically.
The main point is that the programming skills you've learned can be useful in another setting. Starting off as a programmer doesn't mean that you will have to do it for the rest of your life. You have many different choices and it's up to you to shape your career the way you want it.
There is also an extreme amount of micromanagement at my current job. I just get very specific issues and then resolve them. There is no autonomy. The project manager just sees me as a typewriter for his novel.
Jobs where I have been physically active and interacted with a bunch of different people that I don't work with have been much better in terms of my mental and physical health.
I am thinking of dropping down to part-time as I could manage 4 hours per day of programming, and maybe getting a physical job as the other 4 hours.
Usability as a subject is the opposite of art, it is kitsch. You actively try to make simple and obvious; to have just one possible meaning.
She also said that art/painting was the best of hobbies, but would have been the worst possible of jobs. Too little money and too many interested people, so it was a rat race.
Personally, I've found hundreds of subjects I love to learn about. But it seems only one thing I really love doing. So they'll have to break my cold fingers off the keyboard. I love to teach about subjects I love, but sadly lack all pedagogical talent. (Maybe I had liked art if I wasn't color blind or so unmusical that I can't clap hand to most of my favorite music. :-) )
It's not that I want something more creative than programming, I consider programming to be equal parts art and skill. I want something more flexible, not tied to a company that requires me to work in ways that I don't find productive (looking at you stand ups). However, for now I'll be following the money and writing on the side, although it does get draining to split most of my day's effort into two creative professions.
However, I originally set out to become a visual artist. While I doubt I'd be able to pull that off as a career now, I would still much prefer to be doing something in that world rather than instructing machines for the Man. I often think about "transitioning" but so far I haven't found a path (you pretty much have to self-finance), and remain an "artist with a day career."
If anybody is seriously thinking about another profession, and is under 30, I strongly encourage you to give it a shot. It gets exponentially harder once you pass 40.
So recently I've been planning to fund a creative life by saving like a college kid for a decade. The prospect's actually led to a heavy side interest into finance. There are tons of resources on early retirement and financial independence floating around, as well as other ways to create passive income. Based on my starting salary, I'll likely be able to supplement a new career within a decade.
As for what I would do, I'm looking into making music, writing books, and chemistry. Been keeping a journal of book ideas for a few months - challenged myself to write a new one every day - so that I can choose the best ones to practice writing once I get some downtime. I've been playing guitar for over ten years, and I love the production of music. It would likely be recreational, but I want the ability to produce professional quality songs. And chemistry is the moon I shoot for. It's what I've enjoyed learning most in school, so learning and understanding as much of it as I can will bring me great satisfaction.
Second time, I took some time to execute on a non profit to help our local community. Being good with data really help organizing event people really liked so I tried to spin that into a startup and failed. Like other commenters said, I was doing stuff I didn't really like.
I'm back to programming but I'm really glad I tried different things. Not everything was a failure, I eat fresh organic food from my friend's farm and I have an impact on my local community.
Then, I would retire from the industry and focus on doing computer generated art and sculpture.
That would let me stay in software, but let me be creative (I don't want 'creatives' to design thing, as if they were a different species - I'm creative myself!). No scrums (aka micromanagement), no testing, no bureaucratic processes or anything like that - I would just spend all my time creating.
Once I left and ended up joining a small startup, I then realized that all programming jobs aren't like that and working on even enterprise software can be fun. Never looked back.
The opportunity cost is extremely high though. It's pretty hard leaving six figures of income in a low cost of living (and the grass is always greener I'm sure).
Drafter --> Teacher --> Education in Industrial Design --> Ux Designer --> Teacher --> Ux Designer --> Programmer.
During this timeline of about 30 years I never stopped programming as a hobby. I HATED the politics of teaching (which I did for nearly 20 years) but it paid the bills. Ux...well, everywhere I designed, I felt expendable and, like education, it was highly political. For many decades I felt like there was a big hole in my life. I wasn't happy. Then...I decided "F it!" and dropped it all to pursue programming as a career. While it hasn't been bliss, I am much happier. I am not inclined to slave away as a hired gun. Programming has been a way to express my ideas in a way that I was never able before. At 47 years old I feel like I'm preparing for a trip to the base camp at Mt. Everest. I figure that by time I hit the summit I'll be ready to retire, but I WILL retire on such a high note. Maybe I'll die on the summit :)
Despite many great comments from those in the profession or not, go with your gut instinct. When you get to the point where you are thinking of leaving what you do for something else, it doesn't matter whether or not other people got to the same point.
Trust your gut and go with it. Usually, it knows what's best for you.
Don't Call Yourself A Programmer, And Other Career Advice | Kalzumeus Software ---> http://www.kalzumeus.com/2011/10/28/dont-call-yourself-a-pro...
I prefer not to call myself a programmer, although it's a decent way of describing what I do.
I create [value] and solve problems. I used to this by fixing hard datacenter problems as an IT/Ops person, and now I do it as a Full Stack Web Developer. The creating things / solving problems mindset is what is really important to me. Programming is just one interesting "medium" to do this in.
I could see myself creating things and solving problems in other profession. One that I thought heavily about is medicine, law, and writing. I think there are many possible places you can do this in life - it's just a matter of picking a medium you enjoy.
If you need to work on something else, then you can always pick it up as a side project or hobby. I used to find philosophy fascinating. I spent probably a decade of my life reading it as a hobby. Part of me wanted to go back to school or somehow figure out a way to learn it/do it professionally...but I honestly got what I needed out of the hobby. Now I've moved onto other things.
If programming made me miserable, I'd consider getting a second degree in psychology and perhaps doing a ph.d eventually. Or maybe go into management. Or maybe go into medicine. Go with the flow or something.
- Robotics (more on the hardware side)
- Custom motorcycle/classic car building and restoration
The common theme for me is the creative problem solving, building things in general, and attention to detail/craftsmanship specifically that maintain my attention. As it is those are all hobbies of mine, so I still get to dabble while making a good living doing another thing I really love.
My solution was to eventually either become a consultant/freelancer, or create my own startup. When I then realized that a tech lead (Staff Software Engineer) spends about as much time doing manager-related tasks as they do developing software, and that a Senior Staff Software Engineer or Principal Engineer is essentially a manager (almost no coding), I knew my days dealing with corporate world BS were numbered.
My plan didn't really fall into place, as I became a Targeted Individual (likely at the hand of one of the idiots managers I had to deal with) 2-3 years after graduating from college. That BS left me sitting in this room for the last 5-6 years being harassed all day long.
After a few years of the torture, I was pretty much done working, as I was now unemployed for too long a period of time, my intelligence and reasoning ability were waning away, and the harassing/intrusive thoughts were still present and were still getting in the way.
As careers go though, what we do is interesting, ever changing, and an exercise in learning almost every day. Oh, and the pay kicks ass. So, yeah, I've thought it. Lots of us think it all the time, but really, we've got a great job, so while the grass may be greener over there, it's pretty green here too.
Even with a gratifying job full of technical challenges, I feared I was becoming a 9to5 zombie. So, I got a new job a few weeks ago. I joined a non profit offering free WiFi in the city as the one man army tech guy. Instead of just software/web/mobile development, I also have kind of managerial type of responsibility and more public relation to do. It's something like a safe steady job with nearly startup mindset.
There's still a bit of programming involved, but it's so different from what I know that it's a real professional challenge. And for that I had to accept a big salary downgrade.
It really depends on what's your motivation. Is it salary, challenges that go in pair with your personal growth or simply working in a different context / mindset?
That may be the tasks you do that aren't fulfilling? For some people, manual work is really gratifying. Last week I was setting new cables in a patch panel; there's nothing challenging about it but it's simple and you can be proud of a cleanly done job.
I started as programmer in school, but decided you don't need to study it. It's easier to learn it by your own. Then I became architect, but mostly automated my problems and solutions. After architecture became tiring, without enough pay, I went to more engineering jobs.
Survey, civil engineering, city planning and finally stage design and film.This was all fun and got well paid, but I ended up as director of SW development soon after. After this was not fun anymore I went into hard core engineering, Formula 1 HW/SW simulation and support, but in the end I did more SW development than HW support. HW is always tricky and unreliable. SW is much more logical and reliable, much easier to analyze. And you are not that dependent on others. In SW it's easy to solve everything by yourself on 10x less time than waiting a year for someone else to approve something or until this piece is replaced.
So I went to full time SW work again, even if I still do work a lot on movies also. This is just for fun, helping out, going to festivals and such.
I sometimes day dream though about doing something outside of software such as landscaping or remodeling houses. Something I can do away from the screen & keyboard. Something that still involves creating and being able to see the end results of your creation.
My dream is writing for a living, and I'm currently writing the first draft of a novel. I'm about 1/5 of the way there, began a couple of weeks ago. I've tried a few other times, but couldn't get past the first few chapters. I'm now at 18k words and going strong, I hope this will be the one.
Today I do both but I'm extremely thankful I stuck with programming. Not just as a useful job skill but as a different, powerful way to see the world.
Edit: jwz hates HN; made the links non-clickable. Thanks @Jtsummers.
I can't say for definite what I'd do. Music's always been a side passion and I'm attracted to the idea of getting back into music production. I studied it briefly back in college (UK, so I guess high school?) but I don't think my heart was really in anything back then so I let it slip through my fingers. For some reason I also sometimes get these day dreams of working in a market food stand. I can't see how i'd enjoy it considering how disdainful I was of my youth working in retail, but cooking is another little passion of mine so maybe i'd dig it, even if it felt a bit like an step down.
Eventually, a few years ago, I started a company to make software for fiction authors.
Best of both worlds!
Dont really know where to start when it comes to tech + UN. If someone knows please give me a pointer to start.
I should have realized it back then but I enjoyed CS in college much more than software engineering in industry and I miss the difficulty and rigor of the problems.
Martial arts can be incredibly fulfilling. I got to help people improve their physical and mental fitness, gain confidence, overcome anxieties and fears. There were constant opportunities for fun, new friendships, and doing good in the community. Plus it was really cool knowing I could do some of those Bruce Lee / Chuck Norris moves I'd see in the movies.
At the time, I was the sole income for our family (wife & 3 kids). The income possibilities were just not there. We could not have made it work financially. Now, I'm an old out of shape desk jockey.
It's a job, and like any job it sucks (hugely) at times. It also provides money to keep my family, and I get to work on interesting, brain-teasing problems (sometimes! Damn web development).
Frankly, I'm not good at thinking what I'd do until I'm doing it. If I did something else it'd be one of:
Research scientist University lecturer R&D Psychologist Photographer
There's that nagging idea of the 'real programmer' who is getting paid big money to solve interesting problems. Almost certainly a myth but still a frustrating idea.
It was a simple life, but fun. And now season is over. So I look for a job in the IT.
It really changed my life.
I also learned doing bread, alcohol (wines and ciders), playing more music, and did some gardening, illegal picking of (common) plants in the wild ... brawling (movers are no angels) and winning. I grew a spine and a pair of balls.
Don't be scared, life out of programming is quite awesome.
In fact, life is amazing as long you don't feel like in a jail that sometimes is only in your head. I now live with my true colours ; I love to be dirty, mean and sweaty.
Raaah. It feels good to finally be yourself.
Best experience in my life, I have learned a lot about myself and that world outside pure IT can be even more astonishing and challenging. Psychological leap I would say, advancing to new level. Despite my friends who couldn't understand with I sacrificed my top salary (yeah, I had it best among my programming friends).
Though I failed (yeah, can admit that proudly, because I tried) and I am back in my profession, with even higher salary then before 1-year challenge I got much better perspective now. I try to widen my horizons more often and in different ways. Oh, and after few months break aiming to jump back into trading on my own account... Real fighters never surrender, right?
What people like is the 'creative part' associated with a skill. When you do something as a career, most of your time will be used dealing with the 'boring part'.
Then I sometimes wish I was a full time philosopher.
Other times when I've moved between countries and thought I'd take a break from programming to refresh myself.... I end up thinking about ideas around coding and end up coding anyways. So I think I'm a lifer. Not quite sure what role I'll take if there is a zombie apocalypse though, however I have played through a lot of computer simulations of such events and I seem to be a kick ass warrior
... as I said, fanciful ideas of other jobs :)
I have always enjoyed discovering things in subtleties, and learning the reasons behind strange things with research. There are still plenty of things that we have yet to figure out.
However, regardless of whether I did archaeology or programming, I'm sure I would get burnt out every once in a while. That just happens, and it isn't necessarily a bad thing. (Even if it is annoying...) It helps me to remember that this sort of thing passes as my inspiration swings back and forth, and that I don't actually dislike my profession. And until I am back into it, I just do things to force myself to be productive.
It's a job that solves a lot of the problems people complain about in programming, like spending all day staring at the screen or not interacting with people or doing things that might be pointless.
The downside of course is that you eat what you kill.
But if pressed... Corporate pilot comes to mind. I've spend I don't know how much money on training and aircraft rental. Most piloting jobs for corporate clients have you working only 2 weeks out of the month. That is, you only fly about ~250hr a year. The rest of the time can be spent hacking or doing whatever else you'd like to do.
I was an athlete in a former life that allowed himself to get woefully out of shape. I went on a health kick a couple of years ago, got into better shape than I was in college. Now I do personal training on the side, just finished my first triathlon, and am now training to compete in American Ninja Warrior. I really wish American Gladiators was still around though as I would've much rather preferred that.
I have switched to be a guide for Tibet tours (Lhasa, Kailash-Manasarovar) and high altitude trekking and motorcycle tours in Nepal, Sikkim and Ladakh. Customers enjoyed my guided tours in Jokhang and Potala.
Better demand and much more tolerable life than in a coding sweatshop. For everything else there is literally no demand for anything except Joomla websites and Android apps outside the valley, which is already saturated.
And, of course, I have zero interest in things like React or Node.
The sad truth is that indie and small shop IT is already dead. Unless you are a young CS major in US there is no demand for programming jobs. Otherwise there will be a market, not just a few brokers like Toptal.
The only reason i even thought about that is to have more joy in programking after work.
I fixed it by quitting my job and going digital nomad.
With that fear in mind, becoming a M.D. actually seems like it would be a good decision. Even this late in the process, doctors have been well paid and relatively rare for thousands of years; a tried and true profession. Plus it will sate my curiosity about the function of the human body.
I'm in the process of going back to studying. My employer knows this, as well as most my friends and peers. I plan to spend the next two scholar years (starting in 2017) to take a master in cognitive science. I have worked for 3 years in web development since graduating and have enough money stashed to make the transition.
I'll likely write a lot less code, and more maths and english.
My primary motivation is that I believe that breakthroughs in AI and cognitive science at the computational Marr's level are going to have a huge impact, and I want to be a part of it.
I've been mulling over the possibility of some kind of work that would be more conducive to my long term sanity. My imagination has me developing and deploying instrumentation for environmental science. 1/3rd screen time 1/3rd workshop, 1/3rd fielding instruments.
I'll figure something out. Probably when 12 hours of daily screentime becomes unbearable.
Some other people are more career oriented and seek professional growth. There are various lines of professional growth, in each stage of the SDLC. Even if someone is new to the industry, a good attitude will eventually lead to growth.
I LOVE gaming (and transferring my skills learnt from programming & the startup world to the gaming/streaming world).
Apart from that...I've wanted to try and be an investor/trader but I don't know if it's really something I'd get into given the commitment & resources they require.
I'd love to change to working in 3D, preferably with Rhino (which I have a license for). But, that's not what a career is made of and lacking any practical experience pretty much means I'm stuck.
I'm not opposed to starting over at the bottom, as long as the work is engaging. Unfortunately, there's not much call for people with only minimal experience in Rhino3D, that I've found.
History is probably something that will really give you context on a lot of things. Philosophy is great too.
I would like to
- Work at a General Store- Be involved in a full movie / tv series making process ( Because movies have always had a deep impact on me, and I would love to contribute my ideas in that domain )- Invent new food recipes- Research on Ancient History
I'm putting more focus at the moment on exploring issues of Mental health in the IT industry as it's something I've dealt with and continue to deal with.
That seems to give me a degree of fulfilment. Doesn't pay the bills though.
Id always be inventing -something- though, recently I got into designing and building high voltage distortion prone vacuum tube hybrid solid-state instrument signal drivers: aka guitar amplifiers :) analog electronics is a lost art!
Cycle normally repeats every few years.
Currently doing all three at once because startup.
Another thing I've been toying with is prop trading. It's not entirely separate from programming, but the industry is pretty isolated in terms of expertise so it might be considered separate.
there are definitely very tedious things that programmers have to deal with like unmarshalling and marshalling data across backend to frontend components or test automation (think of having a multi-tier system with ios app, database, email service for forgotten password and having to automate all of that). but at the end of the day, the thing i like most about programming is the ability to see the things i create doing something useful. seeing the end result that's of high quality gives me a sense of pride. i'm definitely a maker, it's what i was born to do. but at the end of the day it's about risk/reward and opportunity cost, at this point there's just too much to give up, and the side project isnt panning out yet.
on a slight tangent, i have an electrical/computer engineering background and was supposed to go into hardware like most of my classmates, but i ended up liking the fact that i had something tangible after hours of programming, even though it was virtual, and with hardware i'd have nothing to show for it, but a pic controller lighting up some led's, a breadboard with a bunch of mixed logic implementing some simple thing, or some vhdl state machine that effectively did something simple. no offense to all the engineers working on this type of thing, but it just wasnt as exciting to me.
i find that there's some balance to it all, like getting paid well, but also having hobbies on the side that you can soak yourself into. but then again, i've heard many a story about people doing what they love and for lots of money.
I want to love what I'm doing, but unfortunately there's few things that tickle my brain like this. What should I do, take ADHD meds and go to work, like everyone else?
Take for example current js webdev, with a new hot tech every week.
We can't all become IT managers (nor want to)...
Then I got certified in Autocad, got a qualification in Manufacturing Engineering at part-time school, used that to start a degree in Supply Chain Management in the UK. I'm now on an internship in Miami and I already did a semester on exchange in Finland.
Worked out well so far.
I also love programming (since maybe 12/13 year old me read HTML books and Flash actionscript to make games) and I don't really want to do anything else anyway.
I found that SW engineering is too taxing on my time at my stage of my life. My wife and I are mid 40s and the kids are growing fast.
It was interesting and a bit painful to not have access to source code and to be completely dependent on a slow process.
The only other alternative I've considered is to teach English in foreign lands, but I'd probably still do programming on the side.
I'll probably write code as long as I am alive but not under those conditions, not CRUD apps, not to make someone else rich.
I'd actually say that there are only 4 reasons to write code:
- To learn
- Temporary ( cash )
- To create something which becomes eventually a company
- To solve your own problems
Obv. I don't want to attack someone, that's just how I think about it.
When I entered SE I already knew that I'm not going to do that for a long time, it's on my list, I had to learn it. It's time for the next topic.
And in a way, leaving lower-level programming for the sake of it and focusing on nicer things more connected with the end user kind of feels like it
Last year I took up some programming classes (java) and I actually liked it, however I kept convincing myself that despite that, I was going to finish law school. Mainly to keep my job prospects open, maybe even get a management position in an IT firm faster that way. But honestly, aside from the pragmatic things that law teaches you, it sucks. It really does. Everyone I know either aspires to pick up notary or fiscal law, just so they could satisfy their own prospects of a well paid, highly regarded profession. It's a fairly depressing field to study and to work in.
I did a summer internship during summer vacation this year at a fairly prestigious firm. I hated that job, it consisted of looking up the latest jurisprudence about i.e. 'higher power', it made me read law books that were too boring to even want to comprehenend. I read an M&A template contract, which was interesting, but I couldn't imagine doing that for the rest of my life. All the lawyers there aged 27 and up were anything but living the dream. They worked their ass off from 8am to 10pm to bill enough hours per month just so they could keep their respective partners happy. The partners were well dressed, hardworking and very prestigious people. They were nice to be honest, they weren't assholes like you would expect. They actually made me, and the lawyers that worked there, aspire to become one of them. But then you hear the dark side of things. One of the partners had 2 kids she hardly saw, she actually had a babysitter/cleaning maid who took care of them all the time. Another one was divorced and spent his time harassing every hot secretary he met. Actually many of the male part ners thrived on exploiting their prestige to flirt with the fairer sex. Which I can't help but feel a bit jealous of, having such prestige must be awesome.
Except that's all it is really, prestige. It's the main reason people study law, to my knowledge.
As I'm writing this, I'm contemplating quitting my master's and enlisting in a bachelor of IT focused on cybersecurity. I'm aware that it won't give me the same prestige, or the nice suits (I really like suits), but maybe I'll stop feeling miserable.
Just wanted to give you guys a view from another perspective, law school and law in general aren't all they're cracked up to be. They're miserable places to study and work. Just google the words law and depression in the same sentence.
as an employee/employer, become a technician. everybody needs repair work, and very few can call the result maintainable and sustainable. focusing on residential areas helps, too.