The majority of information out there, including tutorials and blog articles about others' successful deployments, comes in the form of very high-level overviews. Everything I've found is an introduction to getting a basic docker instance running. There is very little useful information out there as to how to run a proper multi-host cluster.
There is core Docker. Tack on docker-machine, docker-compose, Swarm, and the dozens of 3rd-party cluster management abstractions such as Rancher - and the intensity of the headache never stops growing.
It sounds wonderful, but there is so much to learn to be able to tackle a full production stack. It's one thing to successfully launch a working cluster after hours of manual tinkering. It's a separate beast altogether to fully automate setting up a new cluster by issuing a single command, taking into account consistent configuration of: secure networking, persistent volumes with backups, deployment of container configuration and VCS codebases (ex: nginx vhosts and your code itself), etc.
My goal is to set up an entire project in such a way that there is a single suite of automation that can deploy all environments: development VM, staging, and production.
Yes, at least for development, setting up the entire environment must be a one-command execution. Every new developer to a team will obviously need to progressively learn the entire stack, but they should be up and running after a single VCS checkout and installation command.
I expect staging and production to be a perfect replica of the same environment developers use. As to how realistic it is to "launch the entire production cluster with a single command", with remote server provisioning, IP allocations, multiple hosts for various load-balanced pools, etc... I'll have to see when that time comes.
Terraform is designed for something close to one-command execution. You're going to have to swap in variables (e.g. AWS access keys for a particular account, domain names, IP addresses, etc.), but Terraform is designed for that. I would advise looking into Terraform Modules[0], which encapsulate this kind of work nicely.
[0]: https://www.hashicorp.com/blog/terraform-custom-providers.ht...
I recently migrated a whole microservice stack of a half dozen services to OpenID connect and Kubernetes in two weeks. This is with about a year of casual familiarity and playing with Kubernetes, and the same migration to OpenID connect would have easily taken me 5 or 6 weeks to do in Amazon ECS, which is what we currently use in production.
Not to mention I can run a cluster on my three computers at home at no extra charge beyond electricity and play around for free. (See, dear, I'm not a hoarder!)
Setting up a cluster is even simpler now with tools like kops and kubeadm. Or just get one provisioned for you by Google or Red Hat with GKE or OpenShift.
I would highly recommend at the very least making it one of the solutions you try.
If you need any help, you are free to ping me with any queries at the email in my profile. My authority on the subject: having written a book [1] and a Udemy course [2]
[1]: https://www.packtpub.com/virtualization-and-cloud/orchestrat... [2]: https://www.udemy.com/mastering-docker/
Beside that I want to get around HashiCorp tools, especially Vault for storing and Consul for service discovery.
Firstly, because if you don't have some kind of plan, there's no hope, so try and work out what that is now; second, you'll give people who already know that skill a way to advise you.
One of the better ways to do this is to to take the lead. Be a leader, not a follower. That can be interpreted multiple ways: organizing events, inviting people to things, asking what you would like, not what you "want", even taking dance lessons (something like Salsa), not caring about the outcome so much...
Some wisdom from a book from the Ask HN Books thread [1]
> - choose carefully what you give a f*ck about, but when you do, do it right
> - there will always be problems, deal with them and move on, it's your own responsibility.
> - the constant pursuit of a positive experience is in itself a negative experience, acceptance of a negative experience is a positive experience
Also, Systems Not Goals
I'd also like to get better at Rust. I've written a few small projects in it at hackathons, but I've yet to get to the point where I'm comfortable writing in it. I'd like to get close to that.
I'm taking a class prior to graduation in abstract algebra, which I'm excited for. I'm hoping to be able to continue to learn in this after graduating, I've thought about continuing to take math classes at a college by Seattle after I start working.
I'm hoping to lean more about machine learning and how it can be applied to problems, a project that I'm hoping to do in advancement of this is to learn to predict cloud cover in some future interval based on the history of some things (maybe pressure and current cloud cover?)
Outside of work I program in Rust almost exclusively, and would love to hack on something with others.
I studied Japanese in high school, and I taught English in Hokkaido for a year, but I've since gotten rusty with my Japanese. I would love a study/accountability partner to pick it back up again.
Would recommend SILAC program which is mostly talking, even though I did the more formal class route, SILAC is probably more effective I think after learning more about how learning works
Specific advice about Japanese: forget polite form and learn plain form from the beginning. If you are in dire need of sounding polite, just put "desu" at the end of every sentence. It will be grammatically incorrect, but nobody will fault you for it (it's what children often do). The mapping from plain form to polite form makes total sense. The opposite is not true and complex sentences require that you master plain form, so this will reduce your effort considerably.
Also, learn to read. This is especially true if you are coming to Japan. Hiragana and katakana will take you a few weeks. Try to learn at least 100-200 of the most common kanji as well. This will take you only a month or so and it will make your life dramatically easier.
Learn full sentences and ignore grammar for the most part. I got to reasonable conversational level simply by memorising the example sentences in Tae Kim's grammar guide: http://www.guidetojapanese.org/learn/grammar. Use spaced repetition to help speed it up.
Get the JLPT N5 and N4 vocabulary lists and memorise them. Even N3 is useful. These are words that map pretty much directly with English without a lot of nuance, so memorising them is efficient. Otherwise learn vocabulary in context by reading. I recommend manga because it will give you conversational Japanese. There is no description in comic books -- only conversation. They are perfect.
Finally, get a phrase book and memorise some set phrases -- just to help you a long. Keep in mind, though, that a lot of phrases are regional and wherever you are going, they might say things a bit differently. Generally speaking you should be fine if you stick with common phrases, though.
I'm not entirely unaware of the literature in the area. I spent 5 years of my life teaching English as a foreign language. A large percentage of that time was spent doing research in language acquisition. As far as I am aware, ever since Chomsky the general consensus has been that there is no different mechanism for language acquisition in children than in adults. There are still some researchers who disagree, but that happens in every field and is healthy.
But, you aren't going to beat a child in learning a language unless you do some very specific things. That's because they spend 24 hours a day, 7 days a week learning language. Even when they get to school, their school work is primarily surrounding language activities until they get to be about 10 or so.
An adult's secret weapon is the ability to read. If you use that to direct your learning, then you can go quite quickly. Like I said, though, getting to an adult level of proficiency in less than 10 years is pretty difficult, but it's not impossible by any stretch of the imagination. The same level proficiency for a 10 year old child is very, very unusual.
For things like accent and getting tones correct all the time, that's a bit of a different story. Only about 2% of adult learners achieve native level proficiency in that kind of thing. But it's not something that will hold you back from normal communication. Event then, I'm aware of some specific language training you can do to help, but most people are not really interested in going that far.
I really enjoyed -- and benefited from -- "The Japanese Reader Collection". There's about 5 thin volumes available from Amazon. They're basically Japanese children's stories, written in Kanji with Furigana and lots of annotations. Every word and sentence is explained and translated to English.
I started off by simply reading the Furigana at normal reading speed, without caring about reading comprehension. This greatly helped with my kana reading. It especially helped me learn to cope with the lack of spaces in Japanese. Then I started to focus on the meaning. And now that I've memorized most the JLPT Level 5 Kanji, I'm starting to focus on recognizing them in the context of these stories.
After that, you need to be exposed to many, many different examples of that grammar so that you can understand the context in which it's used and the variety of shapes that it takes. The easiest way to do that is to read (and when I was "studying" Japanese I would read 2-3 hours a day).
In my experience, you need this exposure anyway, because memorising grammar rules allows you to construct sentences, but it does not allow you to understand how to use it properly in context. You have that awkward situation where you know you've said something correctly, but people are staring at you in confusion anyway -- because nobody says it that way.
I'm certainly not against learning grammar, if you enjoy it, but my experience has been that memorising a single exemplar and exposing yourself to countless examples (that you can understand) will bring you to fluency faster. There are an infinite number of ways to make grammatically correct sentences, but the idiomatically correct sentences is a very small subset of that (and actually disjoint since quite a lot of idiomatically correct language is not grammatically correct). Learning by example allows you to reduce the problem space dramatically.
Having said that, I know a lot of people really enjoy the process of learning languages by using grammar rules. If it works for you, then that's obviously the way to go!
http://www.fluentin3months.com/
He's learned Japanese (and like ten other languages), but his main value-add is general language learning advice.
And be confident! Japanese people are generally supportive and will appreciate your effort to use the language, no matter how successful it is.
Good luck with Japanese. People often describe it as one of the hardest languages in the world, and you can understand why: three written systems and grammar and vocabulary that changes based on whom you're speaking to and what it's about. But once you learn the rules (and there are many), there are few exceptions compared to English. So it's a lot of work on the front-end. Don't let that discourage you.
The official documentation sucks and does nothing to illustrate how to use it in a real setting. I've tried to understand what it does and how it works about once a month for the past four months but I still don't get it.
http://elixir-lang.org/blog/2016/07/14/announcing-genstage/
Hopefully I can understand it soon, and further cement my understanding by writing a real example for people to learn from. It sounds very powerful and useful but damned if I know how to use it lol.
[1] http://teamon.eu/2016/tuning-elixir-genstage-flow-pipeline-p...
My first project stalled because of poor architectural decisions that overlapped with not-yet-profitable product-market fit (and too much networking instead of product work) and a baby. I learned that lesson and turned into a hermit to rewrite it completely - the market is there, but not immediately lucrative. I'm also writing something that makes money first. I'm hammering day and night with nothing else in my life but my family and the product. My second project is written in GO, wonderfully cheap to run, and about to be ready for launch. Not sure how to turn on that swagger button yet.
Selling to customers is one thing, but how/when do I start selling to investors and employees when few people know me in SV because I've been hammering instead of networking for almost 2 years straight.
I can relate to your comments, I was there about 18 months ago. You would be surprised just how many people talk about confidence (or lack thereof). Also, look for a good mentoring group. Find people that are on the same path (family / business / financial).
If I can help, my email is in my profile.
My app costs 40€, and is geared towards individual users. You don't need a sales team to sell a 40€ app -- just a few emails to announce your product on the right mailing list, and a few cold emails to key influencers.
And a lot of patience, because unless you are very lucky, noone will buy version 1.0.
I mean any random person, your Dad or Grandmother. Work out in layman's terms what problems your products solves, and how it is going to be a business.
Investors and even customers may not be at all interested in how GO is very quick at garbage collection...They want to know how your product will make them richer. Practice on laymen, practice a lot
I'd like to:
-Build a lisp that targets LLVM IR
-Build an HDL out of lisp that can be compiled into a simulation, as well as be compiled to a netlist for synthesis.
-Build a testbench toolkit out of that same lisp.
Do you have a blog ?
I know alot now, yet I'm struggling in some areas. For example, how effective surface a FFI for the language 9I'm with F# so is kind of easy, but how do that in swift/rust where reflection/dynamic calls are not easy?)
Digital Electronics using [1] Operating Systems using [2] Functional Data Structures using [3] Graphics Algorithms [4]
Any recommendations for these subjects sincerely appreciated. Thanks.
[1] https://www.amazon.com/Digital-Design-Computer-Architecture-... [2] https://www.amazon.com/Modern-Operating-Systems-Andrew-Tanen... [3] https://www.amazon.com/Purely-Functional-Structures-Chris-Ok... [4] https://www.amazon.com/Graphics-Visualization-Principles-Alg...
The more you practice, the more you can, the more you want to, the more you enjoy it, the less it tires you.” ― Robert A. Heinlein, The Cat Who Walks Through Walls
also, in case you are not aware of it, there is always the nand2tetris [http://www.nand2tetris.org/] thingy (currently running on coursera btw). the book is also pretty good imho.
I think I should enroll for the Coursera thingy and have at least 1 certificate in my kitty ;-)
[1] https://www.amazon.com/gp/customer-reviews/RZ4ME4QH22JML/ref...
very cool :)
in case you want something more, i have _very_ fond memories of zvi-kohavi's book (switching and finite automata theory) as well. you might find useful/instructive.
About programming/work - I want to learn a little bit of Haskell and want to change my company, I also should make sure the code I write from now on should be Test Driven to some extend
The key is to learn to eat.
From what I can tell, the best way to achieve that is by consistently offering to help others with my skills. So I'm making it a point in the coming year to make blogging a part of my work routine.
Are any of you facing the same dilemma? I'd love to hear your insights!
I think part of it is that I'm not loud enough, and I think it comes from being an introvert. I'm confident, I'm not shy, and I know I'm skilled enough to work on lots of stuff, but when it comes to marketing myself, networking, small talk with strangers, or anything else like that, I just have the hardest time.
It also doesn't help that a lot of opportunities to meet potential clients are found in non-professional settings, and those events are usually centered around the consumption of alcohol in the presence of loud music. I cannot stand loud music and I don't drink alcohol, so the difficulties for me just seem insurmountable.
I've seen advice like, "If you charge high instead of trying to compete with low bidders, you'll be taken seriously," but then there's the issue of having 0 clients/reviews/ratings, which make it hard to command a high rate.
I did have one client on Codementor.io! He didn't give me a review, though, even though we had three sessions and he seemed to be super happy with my help :/
1. If you're going to blog (which I think is a good idea) make sure you have an opinion that is strongly held and/or differs from conventional opinion. If you only write vanilla stuff, you'll only attract vanilla prospects, which usually end up being a poor fit or boring to work with/for.
2. Take every opportunity to teach what you know. This can be through blogging, commenting on other blog/forums, podcasting, screen recordings...whatever it takes to teach something for free. This establishes you as an expert, provides no-risk value to prospects and has no barrier to entry, so it's a great first step to building a relationship with possible customers.
I have some libraries that I tend to rewrite for every new language I learn, but once I wrote something in Rust, its written once and for all, highly efficient and considerably safe, and I can use it from all other languages (node, elixir, ruby, ...).
And I have high hopes for webassembly to replace the brittle and overcomplicated frontend stuff in the next years, Rust should be the ideal candidate to write enterprisey stuff which must not fail.
Perhaps the problem is you're wanting a side-project for the wrong reasons.
This year, my girlfriend and I were using Google Sheets to track our expenses and compete to see who could spend less money. We eventually decided it'd be a way better experience if we had a dedicated app for it, so I worked relentlessly to build one and polish it up until I was pretty proud of it. I "released" it to a couple of online communities where I thought people might be interested, and I gained exactly 1 active user who I don't know in real life.
It's all good, though, because my girlfriend and I use it every day, so that's all that matters to me :D
But yeah, it can be difficult to "scratch an itch" if you feel that nothing needs scratching. If that's the case, I wouldn't really worry about it. If you don't need to build anything, then don't spend time building anything. It's nothing to feel bad about.
CS seems to have this feel around it where it has to be both your job and your passion. Recruiters want to see that you spend all your time outside of work/school programming, which makes it difficult for people like us who have other hobbies they like too. I wonder if it will ever change?
Most successful side projects come from people wanting to express themselves. If you don't have an idea that you want to build at the moment, don't force yourself, just enjoy life and only jump on it when you stumble upon an idea you really want to work on so much that you would even sacrifice your sleep time.
I've got a huge movie collection on DVD. Rather then use Plex I made my own website to do the same thing. I have a lot of PDFs of books I want to read, made similar software to allow me to keep my position in my browser
I wanted to study for a HAM license general exam do I made this: http://ham.joshuakatz.me/exam
I've been looking for a thinkpad x220t so I made this go scrape cregslist for me: https://github.com/gravypod/BargeIn
(I live in N. NJ if anyone has one laying around)
There are thousands of examples where I've done this and it's very fun. It improves your abilities and toolings and in general makes your life on the computer much easier.
You don't have to be trendy just be useful to yourself and people will like it.
We had gone for a group outing, had million photos, less than 10 people in each photo, so didn't make sense to give the same photos to everyone, so wrote a basic app which would let me tag people and created eachone's folder and copied photo in it.
Starting a side project shouldn't be done by the goal of starting a side project, look around you, is there a manual process which you wish there would be a better way to do? sorting photos was one such way and I wrote an app for it. I did the same for a todo list manager, didn't have internet or any good todo list manager, so I wrote one and learned the Go language and the Vue.JS framework
I'd like to learn how to sell a SaaS product[1] to businesses. I'd also like to explore content strategy and marketing. As a software developer joining a new 2-person startup, this is uncharted territory for me. Looking forward to the experience.
Once we have the entire workflow for NPS worked out, we can look at customizable surveys and other survey types.
Also you used the word "sell". Don't forget that sales is different than marketing. If you plan on doing real sales the book Predictable Revenue is great (though designed for slightly larger teams than just 2).
Good luck! And don't forget, NPS tools are good for brick and mortar businesses too.
I've got a few broad ideas for marketing - direct "cold-connecting" via LinkedIn, Angel; long term content strategies and Facebook/Bing ads.
Approaching brick and mortar businesses seems challening, especially since I don't have a background in sales. I have a feeling that online startups might be more approachable to begin with.
Adding Predictable Revenue to my next year's reading list. Thanks for the suggestion.
2. Everything about building and using FPGAs to their potential.
3. machine learning / deep neural networks. I feel we are getting to a point where they are becoming more practical for a business to invest in.
4. How to survive parenthood, with #3 due in May, my son is 3 and my daughter is 2. I've been making it up as I go, but wow is it a lot of work!
[1] https://www.manning.com/books/postgis-in-action-second-editi...
So far I've been able to get a ping between two modules over a 10m range. Next up I'd like to transmit some useful data over longer distances (temperature for example), and then move on to devices that provide useful data (eg when a train passes a certain point to see if it's on time).
Going from the 'hello world' ping to data is an extremely easy step using the right library.
Using a Draguino Lora Shield + Hat combination, with the antenna which was in the box. Dunno what I'm doing wrong - what hardware and library did you use?
https://www.cooking-hacks.com/documentation/tutorials/extrem...
In my case, personal health has left me no choice.
Some poor medical advice and treatment, combined with my adversity to the whole topic -- yes, strong squeamishness combined with fear/observation that thinking about adverse events seemed (seems!) to instantiate them. That all has left me with a substantial health burden.
Meanwhile, in my experience the current U.S. health care system seems to be -- technological "miracles" aside -- making getting effective treatment ever more difficult.
So... As with everything else, it seems, you can't rely on expert consult -- even when you can afford it -- but rather have to learn and do -- or at lease prescribe and manage -- everything yourself.
So... biology. In other words, I need to belatedly read up on the owners manual. And find some hacks that help me.
As an aside, we're about to the point of molecular programming. So, maybe this will coincide with the current leading edge in technology, anyway.
Right now my life consists of Commute->Work->commute->gym->sleep. I actually don't look forward to weekends since there is nothing to occupy my mind.
Once you like something you'll look forward to continuing it in peace on the weekends.
But still doesn't leave much to do on weekends. I usually end up doing some work and going to gym. Not having a car doesn't help. :(
However, both activities are very valuable. Without looking at many things, how else can we know what is worth spending time to learn or do well? I currently feel that alternating between the two is good for a while. Perhaps later in life I will know enough to confidently work on one thing for many years :)
I've also found the tree trunk of knowledge model to be very powerful (I believe I heard of it on waitbutwhy.com). The best learning and understanding comes when we build it up in a tree like fashion, where each leaf or branch is supported by a stronger, more fundamental conceptual branch. At the core is the trunk & roots, which are the deep, underlying principles supporting the entire tree of concepts/knowledge/ideas.
Without a strong trunk to build off of, concepts and bits of knowledge float alone, ungrounded, and can wither or rot more easily.
I sound a bit more negative than I really am. I think both kinds of learnings (deep and broad) are useful, you just need to make sure you adjust your brain and technique of actually assimilating things to the type of learning you are doing.
I've learned quite a few languages/libraries/frameworks/methodologies this past year and while I don't feel like I'm an expert (or even reasonably well versed) in either of these, this broad exposure to vastly different things has stretched my brain in positive ways.
I'd just like to switch that trend for next year.
Though I guess that's still pretty similar concepts. I don't know if my poor math and history retention is a result of me picking up knitting :p
(I only say that because I cannot figure it out.)
Swift and/or React Native. Mobile apps are good.
How to use some basic ML in practice. TensorFlow based NNs would be good.
How to use the ShopBot at my local hacker space. Also how to use the laser cutter to make cooler shit than I already do.
How to sew. I want to make some one-off items but really don't know much about sewing beyond the real basics.
How to use a bullwhip India Jones-style.
Surfing.
Bonus: welding, how to change brakes on a car, how to rebuild a carburetor, how to make kombucha, how to keep bees.
Ask grandma! My mom taught me, but it was an even more common skill with the older generations. Or I guess there's always YouTube.
Does your maker space have a 4th axis for the laser? You can buy clear pint glasses and etch designs onto them. Combined with a custom etched coaster it makes an easy, inexpensive gift.
This is really easy. In fact it's the easiest non-trivial repair there is on a car, because unlike other parts it's actually designed do be replaced as a wear part.
You'll need a jack, jack stands (pair), and a set of good socket wrenches (make sure you get 3/8 and 1/2 size - you'll need the larger sockets). A breaker bar and torque wrench are a nice bonus. You can get all of that at harbor freight for less than $100 (they do ship if you don't have one nearby). And considering the parts for a brake change cost around $100, but a shop charges closer to $600 it's a no-brainer financially.
I learned by checking out a chiltons repair manual from my local library and following the instructions. That works very well, and you can supplement by watching some youtube videos (not an option when I first started). (I would not do just youtube - you never know if they are skipping a step.)
Disk and drum brakes are all very similar within their type, so it hardly matters which model year chiltons book you get.
Like you, I'd also like to learn how to weld :) but the cost of the machine is too high to justify.
Edit:
http://www.harborfreight.com/64-pc-14-in-38-in-12-in-drive-s... http://www.harborfreight.com/12-in-drive-18-in-breaker-bar-6... http://www.harborfreight.com/1-2-half-inch-drive-click-type-... http://www.harborfreight.com/3-ton-steel-jack-stands-61196.h... http://www.harborfreight.com/4-ton-hydraulic-bottle-jack-664...
Total: $95.95 (including coupons, the home page has the coupon codes)
Woodworking -> I'm going to have more free time this year so I want to get back into learning woodworking and actually building and finishing pieces. My first goal is to re-build my workbench and make it smaller so it takes up less room in the garage. After that, I have an idea on a stand that will go next to my couch.
Marketing -> I've created a software product that I'm selling and I want to figure out how to market better so that I can actually sell my product
Just look at HelloWorld. As for templating, I personally use Mako:
Mako is used by Reddit. A few months back I was hired to code a back-end API and I chose Python and CherryPy for the stack, never done as much web dev as I have since. Got a fully working app. Can't recommend much for MySQL, except either SQLAlchemy or PonyORM.
You can make a simple website / web service in CherryPy, and yes RESTful services can be made as well. I say start with basics. Even if you don't use CherryPy in the end, you can start testing it right away with the hello world example. Just don't forget to pip install cherrypy
For learning deployment, first download vagrant and try deploying on a vagrant box. Then, get a digital ocean account (here's some free server time: https://m.do.co/c/6dade5c581b8) and deploy on that. This guide is a good walkthrough: https://www.digitalocean.com/community/tutorials/how-to-set-...
https://www.lightnote.co/music-theory/waves/
Saw it posted by another HN user.
On top of that I want to learn industry game development techniques, including finally getting a solid grasp on C++. I've got a pretty strong grasp of systems engineering concepts and memory management since I'm very active in the Rust community but by the end of the year I want to be qualified to get a job in the games industry. Web development is not going to be my career, that's for certain. I'm reading through various maths-for-computer-scientists books, and I've got a bunch of highly-recommended game dev books (Game Engine Architecture, Real-time Rendering, looking at getting Real-time Collision Detection) in my library. I was an avid amateur mathematician in a past life, so although I'm rusty I'm getting back into my stride quite fast. If anyone has more tips on how to get your foot into the door in game development (engine/tools development, very specifically _not_ programming the game itself) I'd be extremely grateful.
* Security. What's my threat model and how should I address it?
How: socialize, be more outgoing about who I am, get back into sports and reach back to friends I've been letting down, build new relationships, trust people again. Just keep on building, doing and enjoying things for what they are, not what they might fail to be.
I'm also thinking about adding some 'classical' AI at the agent level of abstraction (not the lower DNN level). That probably means a bit of Common Lisp and an excuse for buying some used Norvig books. Like the formal topics from last year, this seems to be a domain that I bump into by trying to avoid it.
And also some Kubernetes, Docker in more detail, explore rkt and CoreOS, perhaps also get into details of linux kernel and finish a custom build from http://www.linuxfromscratch.org/ Get more depth into system security
If time permits, would love to learn more about Quantum Computing and explore if I can contribute in any way.
[0]: http://twistedoakstudios.com/blog/Post2644_grovers-quantum-s...
1. Cloud companies' best interests are not aligned with mine on issues of ethics, snooping.
2. Control.
I did the two functional programming in Scala courses on Coursera. I'm currently going through Martin Odersky's book and am in the middle of my first small project. I'm just starting to turn the corner on feeling productive and actually understanding what the hell I'm doing. If I am half as productive in Scala as I am in my main language (JS) by the end of the year, I'll be quite happy.
Time will tell how much of this I actually get to, but at the very least I'll be busy :)
The secret of learning Salsa (and other things) is that most people give up to early (after the 1st lesson, 2nd lesson). If you keep on going, the lessons that were hard for you in the beginning will become easy. If you keep going and get better and be (more) social and fun, the follower that you were intimidated to dance with will ask to dance with you... (the tipping point, an important milestone).
If you can take lessons with your wife and practice with your wife at home, that will make it easier. The hardest thing for single persons who start learning Salsa is that they don't have someone to regularly practice with. This is usually not a problem for the most dedicated beginners, as they block off their free time for learning salsa (multiple lessons a week all the way up to multiple lessons a day). The most social tend to progress the fastest, as everyone wants to be around someone who is fun and social. Salsa is a community, like anything else.
Addicted2Salsa has enough free lesson videos to keep you busy for a long time.
https://www.addicted2salsa.com/
Start listening to Salsa music instead of other music, so you can pick up the '1' (or the '2') beat.
Buena suerte!
+ continue learning Clojure and build stuff with it
+ improve english speaking skills
+ read more, in english and native language
+ learn how to find clients outside of online freelance marketplaces
+ get away from ruby and rails
+ study more poker hands
+ learn to play chess better
+ learn about seo & marketing
+ bootstrapping a SASS product
+ make a few html5 games in clojurescript
If you want to learn the notes instead of learning them across the 6 strings, concentrate on learning them up and down the same string.
The octave is 2 strings higher & 2 frets higher. The perfect fifth is 1 string higher & 2 frets higher. (Same shape as one of the movements of the knight/horse piece in chess :-) ) The minor third is same string & 3 frets higher OR 1 string higher & 2 frets lower. The major third is 1 string higher & 1 fret lower.
On a normal tuned E-Bass this is valid for every string and every fret. On Guitar you have to add "1 fret higher" if your start point is on string 1-4 (E to G) and the target is on string 5-6 (B, e) because the interval between string 4 and 5 is different (major third instead of perfect fourth).
Good Luck in 2017! My goal is also "continue learning Clojure and build stuff with it"
See here: https://www.justinguitar.com/en/IM-116-NotesOnNeck.php
* /r/chess is a great community.
* Chess.com is also good, particularly for their analysis tools and tactics puzzles in the app.
* Lichess is my favorite for actually playing games with other people.
* Queen's Gambit is clearly the most fun opening as white.
* Chess can be one of the most infuriating games in existence.
* "The Immortal Game: A History of Chess" is one of the best non-fiction books I've read in awhile.
Specifically, I want to learn how to: 1. Build and deploy an F# web app with Suave as the web framework and Fable on the frontend. I'm not quite sure what to use as a backend (I know and use Postgres, but am open to using something else). 2. Test my code using FsCheck (based off of Haskell's QuickCheck) by defining properties/attributes. 3. Use computation expressions 4. Use and build type providers
I'm a professional Ruby on Rails developer by day, so I'm interested in F# because it's so very different than what I'm used to. Plus, it has a lot of shiny tools/toys that I want to play around with and learn.
I collected a list of videos from some business conferences I really like, you might get some ideas in here - https://www.findlectures.com/?q=marketing&p=1&type1=Conferen...
Joking! I'm going to dive in it right away!
I have been develioping web and mobile apps for about 6 years and now I want to create something for passive income.
What I don't like is the prospect of losing static typing. Nor do my co-workers. We need to spend some time doing R&D.
In the meantime, my Twitter is in my profile, and I'm pretty sure I'll post a few snaps here and there :)
(you're welcome)
You can be the best developer in the world, in a job that leaves you alone and lets you write code, and you might get several times as much done as another developer. Or you can spend a little less time writing code and have a few productive meetings and discussions, resulting in far more development than you could ever do alone. And you'll still get to write plenty of code.
Personally I don't like these Emacs distributions so I might recommend the way I did my journey: first vim for years, then emacs+evil. You'll learn the bare emacs basics on the side. Now with Vim 8 having vastly enhanced IPC capabilities, Emacs might not be at such an advantage anymore. The amount of Vim users is staggering, and they have such energy. It's a nice community overall. (Not that Emacsers would be any worse.)
I have been doing scalable back-end systems for years and can tackle interesting problems quickly. But, with UI work, I am like an infant with crayons. It takes too long to go from desire to product.
- 10 seconds Free-standing Handstand: Practice 6-7 days a week, for twenty minutes, following the GMB Handstand progressions.
- 10 seconds advanced tuck back-lever on the gymnastics rings: Practice 3-4x week, following FitnessFAQs progressions.
- Bulgarian split squats, 4x12 50kg: I'll go with a somewhat linear progression -- work from 3x8 up to 4x12. When I do 3 workouts using 4x12, I'll up the weight by 2-4kg and start a new cycle.
- Books I'll read:
1. Gödel, Escher, Bach
2. Black Swan
3. The Society of Mind
4. Code complete (I'll read a chapter every week)
- Finally learn about compilers/interpreters: 1. Work through "Writing an interpreter in Go"
2. Work through "Language Implementation Patterns"
4. Work through "Engineering a Compiler book"
5. Do the Kaleidoscope LLVM tutorial in OCaml
- Get good at algorithms to have a better chance at landing a job in one of the the big 4: 1. Work through HackerRank's Cracking the Coding Interview track: I'll do 3 challenges every day until I am finished.
2. Solve as many problems from LeetCode [1] as I can: I'll solve 2 problems every day.
3. Work through the "Algorithm Design Manual book"
- Really learn Java. Java 8 looks interesting and I see there are a lot of job opportunities for Java devs.Looks like a plan!
[1]: http://www.learn4master.com/interview-questions/leetcode/lee...
I'm currently working on wall leg flutters. My balance improved a lot after I increase training frequency to 5-6 days a week (in comparison to 3x).
Good luck!
I learned in my early 20's and I did it in 6 weeks. Get the theory part out of the way ASAP.
When you have got your license is the time to watch out for complacency. The road is full of egos driving Audis, don't get involved. Keep a safe gap and you will deal well with uncertainty
Not necessarily in that order.
EDIT: yhea fine this was a bit insensitive and mostly a joke sorry, I wont delete as proof of my mistake. Javascript it's not that bad.
I'm looking forward to having both the technical skills and sales skills under my belt.
Read the challenger sale: https://www.amazon.com/Challenger-Sale-Control-Customer-Conv...
and read SPIN selling: https://www.amazon.com/SPIN-Selling-Neil-Rackham/dp/00705111...
Listen to the advanced selling podcast: https://advancedsellingpodcast.com/
Cheers
I love podcasts so I'll give that a listen.
Formal study would be fine, perhaps at UC Davis' world class Viticulture and Oenology program. Or in Burgundy, France. But for now just apprenticing once a month at Wind Gap Wines in Sebastopol and seeing whence it leads
https://www.amazon.com/Hills-Chianti-Tuscan-Winemaking-Bottl...
I'll start out with 100 days of drawing anything. After 100 days, I'll start trying to make them more tutorial-oriented. Then I'll start working on cartoons about Linux commands. I might also explicitly just imitate some of Julia Evans' stuff. I might do some maps of US revolutionary war battles or diagrams of contra dance steps. By the end of the year, I hope to have done at least a few illustrations for the Postgres docs.
Any suggestions on how to go about learning Mathematics requires for Machine Learning is more than welcome
But you don't have to wait to learn all the math to get going
Do you recommend any good books or resources?
This is a common mistake people new to the field make. You can be very successful by learning how to use machine learning frameworks, and that doesn't require lots of probability theory, mathematical statistics, and optimization. Not that it hurts.
vayarajesh, start using Tensorflow, you'll reach the ability to reason about problems to which machine learning can be applied, and how to apply it, much more quickly than starting by starting at the root of the tree of knowledge. You can always learn as much math as you want in order to dig as deeply as you want, but first get a sense of what you're dealing with.
Starting by learning the maths will mean you learn a lot of stuff which isn't directly relevant. Not the worst thing that could happen, but you'll be a hell of a lot more directed (even if you want to learn the theory - and I would recommend learning at least some) if you pick a decent ML course and learn the maths you bump into as you go.
http://cs231n.github.io/ is one of the best general hands-on introductions I've found. The TF tutorials are pretty good too if you just want to try some things out, but I predict that once you've worked your way through the TF tuts you'll still not really understand what's going on and will feel a bit like you just learned the magic words that made the black box dance some particular dances.
As for notation - https://en.wikipedia.org/wiki/List_of_mathematical_symbols is really good for when you stumble on something unfamiliar.
Good luck.
Finnish and Hindi are the two languages I wish to learn in the next year.
Spend some time on a good marketing page (which you'll have to do anyway) and have an newsletter sign up where a download link would be. You can get a feel for how many people are interested, and having a known audience can keep you motivated to keep working.
I'd like to learn/do a couple things in 2017:
- An overview of college-level conceptual physics. Historically I've tried to leap-frog into advanced physics because my math is pretty good, but I end up missing out on the concepts. So I'll stop rushing and do it step by step.
- Deep learning and deeper machine learning. I'm pretty familiar with ML in general but have never had the intimate understanding I've wanted, nor taken the time to properly dive into DL.
- Bahasa Indonesia and Mandarin ^_^ (while maintaining the rest)
- Abstract Algebra and Information Theory
- Keep up the pace with reading interesting books
- Become more familiar with devops and systems programming (Docker, Rust etc...but not an expert necessarily)
As an aside, I'm also trying to improve my running, swimming, and martial arts :)
I'm sure other things will also pop up in time!
- I want to get really good at making my video tutorials about digital art.
- And I want to get way better at making my webcomics.
CS-wise: learn enough ClojureScript to be able to make convincing mathematical (etc.) visualizations -- I recently got a taste of Figwheel+Reagent and I'm hooked! -- and be able to manipulate Haskell transformer stacks better.
Other than that, I'd like to learn some French (marathoning Engrenages was the best decision ever!) and not forget the little German I know.
Being in India, I can do a lot of work for much cheaper rates than others out there. But I don't want to waste my time with short term projects. Might seem like you're earning a lot but there's very little one actually learns at the end of a few months, which to me at least is a net loss.
So I am going to try to find some kind of long term project/task as a junior/senior engineer, something that's challenging or at least worth putting on your CV.
I am also planning to work on my thinking skills (lesswrong/SSC and Economist), and React.
Not going to add anything else. Discipline is the word for this year.
[0] https://www.manning.com/books/type-driven-development-with-i...
Learn CS basics, Data structures, Algorithms. Plant to use this => https://github.com/open-source-society/computer-science as a guide
I'm a self-taught front-end developer without a CS degree, coding professionally for 4 years now.
I also want to get up to date with the most important advances in my field (distributed systems and algorithms). I did follow research in 2015, but not in 2016, so I have to catch up a bit.
In terms of practical benefits, I still hunt for python idioms on a routine basis. Owning and flipping through a book occasionally comes to mind. Any suggestions? (I am pretty good with multiple years on the language across 2 and 3)
I would like to stop flirting with machine learning and just finish essential chapters from statistical inference and spend time on linear algebra. Then maybe I would try to understand backpropagation for real. Meanwhile, applications must continue to be built and I must learn effective techniques to preprocess data. I would like to do more work in Pandas and Hive.
I've found my notes to be a trustworthy friend. I need to set myself a reward system to inculcate a habit of writing more (daily thoughts, project ideas, blog...) (and on paper)
I would like to fingerpick a few songs I have in mind too.
This would be a good list if I go deep. Could I make space for haskell, clojure, scala? Probably not. Might just read Backus's functional language paper though.
One book to read every month - The Power of Now.
Personal: Mastery in something non-computer related. I've spent my twenties building a career in software, have built a startup, etc but want to end my twenties and begin my thirties with something new to "master" (even though we can't ever fully master something). Increasingly fascinated by freediving and reconnecting with nature and what the human body is capable of.
Even I am considering such a move. Though for me it will be to Associate Product Management (if I do get through) from SDE.
Any tips/advice you may have?
However, technical product management is a different story than "pure" product management, and for me, was a more logical transition from software engineering/dev.
Outside of work, perhaps one day a week or less, I am planning to take some of my photography and turn in in to wood carvings using a custom automated workflow via commercial laser cutters. Allows me take the best of digital by working in vector, but maintain the satisfaction of an analog result by printing a tangible, physical result.
And I also want to learn how to play the Stone Roses' I Am the Resurrection on guitar.
Happy New year, hackers!
a) Define your niche
b) Point out the ways you will be different from others
c) Know who your first customers will be and how will you approach them
Before you start programming/other tech stuff. Simple advice but much easier to preach than practice.
All the best!
[1] https://bard.co/
p.s. I have bachelor degree in CS, and my theoretical (specially in Design and Analysis of Algorithms and Operating Systems) foundation is rock solid, maybe same level of a last year graduate student from ordinary university (not top-notch of course). But I need to learn more about Compilers and Programming Languages and their underlying technology, and I have chosen C++ as language that I want to spend my career on. So 2017 for me means C++ ! (and a little bit of Rust).
Another things I really like to get my hands really dirty is build tools. I do use CMake for my personal projects, but I want to learn Autotools, Meson, gn, etc. Because I fucking hate build tools, so I think knowing more and more, is good idea to understand whats going on in build tools area.
p.s. I wish next year this time, I can look at past and proud myself! I wish, wish me success HN!
On programming front, Rust is looking good.
I have built some basics of Linux, Python, Ruby, HTML/CSS/JavaScript and tools like Vim/Emacs in the second half of 2016. I decide to do program development on my 27th birthday. My major in the University is English Literature.
More in details, in 2017, I plan to learn Elixir, MySQL/PHP, Sqlite, Ruby on Rails, Django/Flask, Node.js, Gulp, advanced Javascript, Material Design, Semantic UI, Docker, Travis CI, Jupyter, Lisp, Haskell, basic Machine Learning and pick up math like calculus, probability theory, linear algebra which I've learned in the University.
I desire to become a remote developer who can earn at least $30000/year after 2017. That's my target now. But in the long run, I want to be an expert in ML and AI.
Because I want to do remote work, so I want to learn as much as I can, so I can catch up more works. That's my thoughts at present.
The plan of action: keep at it by attacking more wargames and CTF (capture the flag) contests. Also, I should probably try to consider bug bounties, to be able to orient the skills to real world problems as well.
And that's how I plan to do it:
- https://learnxinyminutes.com/docs/red/
- http://redprogramming.com/Home.html
- http://easiestprogramminglanguage.com/easiest_programming_la...
* Computer Graphics. This is one area of computer science I am really interested in and wrote my undergraduate dissertation in. I want to go back to the basics and get up to speed with the new trends in the field. Again, need recommendations on how to proceed with this.
* Become a Python Ninja. Python is one language I am really comfortable with and whenever I can't get anything done, I go back to Python. There are still several facets of this language I need to explore.
And lastly, I need to quit my current job and work on something that lies somewhere in those^^ areas.
But this isn't what I'm looking for. I have a bird's eye view, I can build apps, I can make games. But that doesn't make me a good Android Developer or an expert in computer graphics. I need recommendations for texts/courses in these fields.
I plan to learn by myself with a combination of duolingo, babel, flash cards, traditional teaching books and audio cds.
My girlfriend is Swedish so I can train at home.
Any tips are welcome!
- Want to learn about sysadmin stuff. I know the basics but I want to learn about automating the infrastructure using various tools like docker, ansible, terraform, etc.
- Definitely want to learn and build cool IoT stuff.
1. Haskell: all the cool kids are doing it, and I like its formalism
2. Hy: I write a lot of python, and really like the idea of working with familiar data structures.
https://www.gitbook.com/book/evancz/an-introduction-to-elm/d...
(In all seriousness: thanks!)
For not work, I want to improve my oil painting and my drawing skills! I got a Pi this year and want to use it to dabble in digital sculpture.
I've also got a huge interest in film and intend to teach myself filmmaking. I've had an interest in exploring it since middle school, but I've never committed the time. This year I'm obligating myself to film and edit something short every weekend. I live in Atlanta and our film scene is burgeoning, so I'm also hoping to network with local filmmakers and students.
Anyone in the Atlanta area interested in either of these subjects?
1. Whether I can climb V11.
2. Rust well enough so it doesn't feel like a wrestling match any more.
3. How to do a handstand.
https://bartoszmilewski.com/2014/10/28/category-theory-for-p...
https://www.youtube.com/playlist?list=PLbgaMIhjbmEnaH_LTkxLI...
Did you find anything from a "practical mathematician" type of view?
P.S. Also if you are in need of Intercom analytics please give us a try - I would be glad to have you onboard.
Planning to use the Unreal tutorials and then a few YouTube tutorials I found and I'll check out Pluralsight, and then just start building stuff!
I'm coming from a C# base so any suggestions would be greatly appreciated.
Sorry no links, on mobile and don't have access to my bookmarks.
Nothing complex or groundbreaking, but i've always been curious about how that all works. Maybe if it works well enough (it won't) I'd even adopt it as a scripting language for
2) Game development. Either to really learn Unity or C++/SDL/GL but put out something that isn't utterly basic and pedestrian.
3) I don't know. Something new. I'd hate for my life to have become so predictable that I can easily predict what opportunities will arise or what the limits of my ability to learn will be.
On the other hand I want to learn urban sketching.
* improve my knowledge of Erlang
* catch up with ES6 (not really useful, but, just in case)
* learn how to scale my side projects from 5-10 initial users to 100-500 (some seo, marketing, sales)
* how to be efficient with my time
I started writing a sword and sourcery novel on my rail commute, and its been much more fun than listening to fantasy audiobooks (which are very hit and miss in quality).
I've previously learned some French, German and Mandarin Chinese. I'd like to reach the threshold where I manage conversation in one of them by the end of the year. My Mandarin learning is most recent, my German was the most in-depth, and there's a French programmer working next to me. I dont know which one to do yet!
I'm assuming you already work in a firm managing investments and will likely have little to no free time already.
I'm thinking about starting with a limited format, say no more than 300 words for explanations and a few images. I want to focus on teaching the absolute barebones basics of a concept so that someone could then go to wiki or other sources with a basic understanding. IDK. Something like that.
Finish reading 'From AI to Zombies'
Get to a point with Rust that it's my go-to language for personal app development and general scripting. Super happy to see Rust feature so often on people's lists btw.
Get to a point with general Machine Learning understanding and proficiency that I feel I can usefully contribute to OpenAI work.
Build a retaining wall under my house, and have it still be retaining the things it's intended to retain come the end of the year...
1) I want to learn Java and be an expert in it by the end of 2017. Also, some of the basic concepts of computer science. 2) I am going to start a new food website where I am going to create and share new recipes. I really want to learn so many new recipes and improve my cooking skills. 3)I am going to buy a Ukulele next week and I want to learn it so badly. This is going to my first musical instrument and I am so excited.
But don't let this stop your for trying to become really good at Java. Or any other skill, language.
Consider watching Alton Brown videos on youtube. I find he does a good job at explaining cooking at a lower layer of abstraction. Also, a big part of cooking is keeping your kitchen organized, so think of the physical layout of your cooking space as a UX/information architecture problem. If you have a disorganized kitchen and are trying to just follow a recipe, then you will feel overwhelmed as you aren't able to hold things in working memory.
Also, for recipes, check out https://paprikaapp.com/ and https://www.reddit.com/r/slowcooking/.
All the best to everyone for their learning goals.
2. Get one open-source project shipped.
Some other things that I'm excited to learn is how community is created, managed, and sustained in this type of medium.
It's a creative challenge that has been really hard in the past few weeks, but, I've already learned a ton.
I also might mess around with the Salesforce Heroku connect and build some Spring or Play application to connect with Salesforce data.
I have listed my goals here: http://www.kashifaziz.me/new-year-resolution-2017-goals-plan...
* Understand what toposes are.
* Understand what monads are.
Edit: what are toposes and why do you want to learn it? Has it some connection to topology?
Category
Functor
Natural transformation
Adjoint functor
That's it.
If you don't understand what monads are you should probably wait with topos theory. It quite abstract and you should probably be comfortable with both algebraic geometry and category theory before you approach it
I am finding the Racket documentation a bit problematic: it's either "learn this super-specific things with no prior introduction" (example: the "continue" guide) or "learn everything from the very ground up" (example: the racket guide or how to design programs).
Any suggestions would be appreciated.
Career devpt: Sales
Mob. Platform: Swift/ObjC. In 2016, it was Android
Web Framework: React/Native. Last year, it was Angular
Langs: Golang/Rust, Haskell/Erlang/Elixir
Personal: Long form writing. I already write short stories at stories.shrikrishnaholla.in . Want to write something more ambitious
1) VSCode extensions for code coverage and inline debugging decorators.
2) Rasberry Pi Self Driving Car. Autonomously navigate from A to B
3) VR Meditation app. You are a god and different sounds of "Om" creates beautiful landscapes and life.
From non-technical side I want to:
1) Keep up meditating everyday.
2) Write one chapter of my book a week.
3) Once my wrist recovers, go back and hit the gym.
4) Take some dancing and art classes.
This seems interesting. What are the resources you're using? Do share a blog post about it once you're finished!
I want to mount the structure sensor from occipital which gives depth info and be able to build a map of my house. Still a lot of things need to be done but I have ideas on how to make it work.
And I want to learn French.
2. gRPC/Protobufs
3. Kubernetes is also on the list. I really wanna understand how microservices work in production (deployment, monitoring, recovering, debugging).
4. Practical Deep Learning (TensorFlow/Keras etc)
Any suggestions/guidance for any one of those will be really helpful.
PS: I'm from C++ and python background.
You can search the collection by keywords. For example http://coursehunt.net/?query=android
I want to learn how to chill out and take it easy in stead of cramming every single minute of my day with something or the other.
I'd really like an opportunity to work with these, I find the whole ecosystem really appealing
But more generally, how to get into a routine for learning something. I have Duolingo and Memrise but I forget to open them every day.
Would love to get your feedback. It's designed to give you practice actually using (speaking) Spanish. Totally different from Duolingo, Memrise, et al, which I find unbearably tedious.
- Build a full end to end app using Vue and stuff
- Build my Startup
- Learn investing
- Learn German
I'm kinda gonna do that too. Wanna race to 100 subs?
It covers the foundation of functional languages with the simply typed lambda calculus, and also the principles of formal specifications and proofs. It's suitable for self learning, but is a significant effort so you need to have a strong interest in these topics and be ok with a very formal approach to software.
That is actually my goal for 2017.
1. Improve my English skills
2. learn more about basics CS knowledges like algorithms, data structures.
3. Figure out what is Machine Learning. Maybe learn some Discrete and Linear Algebra for better understanding, but first I'll write some code using frameworks.
https://m.youtube.com/playlist?list=PLZHQObOWTQDPD3MizzM2xVF...
I want to learn by doing good projects in this field but I dont have any ideas. Apart from Kaggle, is there any other sites which have projects related to Data Science field.
- Read more books
- Basics of music theory
Specifically more about CSS and JavaScript, maybe NodeJS, maybe React.
Plus, it's free!
It works well with a legacy/enterprise stack that I work with. I can't really get the benefits of Angular 2 ( Typescript, Server Side Rendering, better? component system) with the stack that I use, but I will be looking into React for some potential Ruby/Rails apps.
All the best with your hindi effort. I don't have any resource recommendations to give but if you wish to ever talk or clarify hindi concepts, you can hit me up.
Only yesterday, I was cribbing about the lack of quality hindi content on the web. Time I actually started trying to do something about it >_> .
Going to try to learn from my mom as well; I used to know how to speak it when I was really young, but forgot over the years.
Oh, and Finnish.
Any suggestions?
* Get more skilled at off-road cycling
* Publish a non-embarrassing code side project
* Expand my healthy cooking repertoire
Seriously how good is your calculus and statistics? Joel Grus book 'Data science from scratch' might be a start.
2) Working with VPSs and other IaaS/PaaS services.
3) App Development
4) More about Python
5) Design
6) Historical figures in CS
7) How to adult
8) How to navigate the job market
9) How to grow a blog
* open containers * rkt * docker * kubernetes * terraform
Probably in that order.
2. Read books
3. Family and work balance
Don't know where to start.
I feel that such knowledge is eternal. It won't be obsolete in 2027. ReactJS on the other hand ...
There's nothing wrong with Haskell, but I think that a lot of people mythologize it because it's not used by many people and has an air of academia. A lot of people do the opposite to ReactJS because it's a popular framework that a lot of people use. It has no mythos. Of course, mythos is orthogonal to actually having practical, useful ideas.
- https://youtu.be/I8LbkfSSR58?list=PLbgaMIhjbmEnaH_LTkxLI7FMa...
- https://www.infoq.com/presentations/category-theory-proposit...
I'm very, very, very open to suggestions... especially if they're presented from the ground up, and in lots of detail. I'm also quite open to material that can be read rather than watched.
This is the book that really demystifies it from the ground up.
[0] https://zr9558.files.wordpress.com/2013/11/algebra-chapter-0...