1,181 karma · joined February 6, 2013
This guy has a biography online about what he did so screw that. Just post a link to this article if you re-enter the work force. But you'll have something to put there anyway.
The tone of this article is a little less than objective which I feel discredits it a bit. But hey it made it to the front page of hacker news so...
Can you clarify what is meant by better here? More compressed?
Love, - guy who writes software and knows that all software is terrible
FWIW your ability to type on QWERTY returns after a while - you just need to keep using both. It's like a switch changes although it helps to have visual queues to get back into gear with qwerty I find. Otherwise my keyboards are all blank now including a blank kinesis advantage. If I use qwerty I need to look at the keys to start typing usually.
And my typing speed is probably slower than it was when I was using qwerty. I was reaching 120wpm peak on qwerty, maybe could do 100wpm with colemak (haven't checked) but I type much better as I learned the new layout with discipline - eg no cheating with wrong finger on keys - and I move my hands much less so my RSI is better. You can visibly see wear on my home row - a sheen that's on those keys from pressing them more than the other keys. My co-worker says it looks like I'm hacking on the matrix because my fingers don't appear to move when I'm typing.
I noticed Wikipedia references another app for terminal in C: https://github.com/Tiehuis/2048-cli
Might be interesting to compare.
You have the ability to write some code! If you want to get a jumpstart, you should take the princeton algorithms course (for free!): https://www.coursera.org/learn/algorithms-part1
Or read the textbook by sedgewick that accompanies the course. https://algs4.cs.princeton.edu/home/
There is very little math in there - it may take some elbow grease and mentorship to help to convey some of the ideas - but I believe that you could implement and solve most everything in there. That was my path - I had a teacher at the age of 14 who would explain to me how different algorithms worked and I would go and implement them. Drawing a circle (in memory - it was in C!) or sorting a list (we did bubblesort first IIRC!)
I think you could do it! I believe in you! The course material is approachable - much more so than basically every other algorithms/data-structures material I've found. it may take you some time but you'll be soooo far ahead with your thinking about code.
If you ever start working with Object oriented languages like Java, another book that may help you when you've gone down the road a bit is the Head First Design Patterns book. http://shop.oreilly.com/product/9780596007126.do It's very easy to read, mostly pictures. It is made to be very easy to read (all of the books in that series are so look around at them.)
It's helpful to do both - code and also take in some material, but at 12 I imagine some of the material may be a bit daunting. You're doing really well - keep it up.
Because the events coalesce into kafka, you can use a mechanism like logstash to spew this log data into eg elastic search and then use that for your queries. Or write to the db here (in process) or there (cqrs style.) There are different architectural approach used, and they all yield good results, of very high reliability in processing, if slightly "eventual."
It works well. We do use rdbms too, but a lot of the time we avoid reading from it after initialization (or after encountering an exception causing an actor to restart). Depends on the data though. Some places I read on every command because I know the risk front is small and it's easier for a jr to get in there and understand what's happening. A good rule is that a single process should own that data so you don't have to worry much about consistency related concerns. In microservices good practices, each service should really own its own data completely but I believe that it's fair enough to say a bounded context owns its own data (even if in a shared rdbms) if building at a smaller scale.
In terms of code, I'm usually building with some variation of onion architecture these days, where all context is build on the outside (eg receiving a request, getting info from state or db), and pure domain logic 100% effect free exists on the inside that receives all of the data from the outside and turns out some commands or events in response. This makes the important logic very testable, and easy to reason about. Core domain logic has no effects - not even logging - but only generates events/commands in response to commands and events. You never mock that stuff - it's the star of the show. Nor do you ever have to. The generated commands and events are later "applied" by the outer layer, logging, shipping them off to kafka, and/or writing some stuff to a database.
That's where I'm at today. I am working in realtime systems so it's a good fit for the approaches. I'm finding the software is turning out very well. We're working fairly quickly, the software is very encapsulated to a bounded context, the domain logic is clear in the core, easy to test and read, and change. Or even rewrite if needed.
And yes long recovery times are an issue unless you want to keep every entity in memory forever and ever, or you can tolerate extremely slow turnaround times. There are knobs and dials here that are subtleties that people won't think about until after they launch.
If you have a hammer everything looks like a nail kind of thing. There are other ways to handle problems that are only marginally different in how they persist and recover state, yet are far more usable for certain use cases. I'm extremely skeptical when I see someone gung-ho for event sourcing if they've never used it though. I tend to look at the problem very hard to see what else we could do for persistence while still maintaining the "source of truth" in memory.
I'm still working on event/message driven systems (today with Elixir mostly) but I've started to make architectural compromises to move away from especially event sourcing. Event Sourcing + CQRS may be prescriptive but it's very hard for new developers to pick up and understand the layers of abstraction underneath eg Akka + the Persistence Journal. And I'm not sure I can trust many of the open source libraries outside of Akka to be honest. I've had to dig into the depths of postgres journal implementations and apply windowing to journal queries for example because they weren't burned in at the scale I was working with (partially because I inherited an application with a single entity in a context which had many million line long journals - this highlights a design error though but hopefully you can see my point.)
You don't _need_ to use these patterns but you can still apply DDD and event/message based abstractions, and publish events. An entity can write its state to a record and then apply the state in memory as well without using a journal given you handle exactly once processing semantics correctly. This means there are knobs and dials. The problem with event sourcing in the greater picture is that it's descriptive of an approach, and there aren't many clear alternatives that people are talking about that work in similar system designs. If you have very long lived entities, or only a few of them, it gets especially difficult to keep the system alive over time, but for those use cases it doesn't mean you should stop receiving commands and emitting events.
You always here about the idea of the approach, never the reality of maintaining these systems, or the inappropriate use. In one implementation, there is one entity that receives thousands of events a day, and lives forever. How do you maintain the journal while changing the code, keep it alive over time? I've watched event sourcing and CQRS sink projects and teams. I've watched well paid contractors unable to figure out how to cluster and scale these systems. The barrier to entry for people to become effective can be high and you should understand the long view in terms of people required and cost over time and validate the approach for your use case very carefully. Again, the fact that everyone talks about event sourcing and no closely related alternatives makes it seem like the gold standard or the only option but there are other (simpler) ways to deal with your persistence in an overall similar architectural approach.
It's better to be a good programmer that's deeply experienced in a domain, then a great scala developer that doesn't understand the domains he's working in.
I'm more in the distributed space so I know elixir and scala very well with actor model and distributed coordination tools in my toolbelt. I'm not the best scala engineer but I can get shit done and it will be correct and work through all of the pathological conditions because I've seen a lot in this area. If you asked me to build a webpage I'd fall apart but I'm good at that specialization and have all of the tools I need to work with the technology I know today, and to build on to learn whatever technology is needed tomorrow (eg I've been working with elixir for a year but I'm extremely proficient at it because of my 6 years of akka experience)
I think also the motivation for (advertising) profit is what is driving the innovation on the other side.
Our team is extremely small so the value of work contributed by each head (given the individual can successfully contribute in such an environment) is very high.
The issue is less finding takers and moreso finding the right takers. I've turned down people who were very interested because I wasn't sure about them. Unfortunately, I have been outbid on hires I was sure about which is very difficult to swallow. I would like to be able to offer at the upper end of the spectrum but the equity does have some value in the picture. I'm sure we could do an either or thing. Like you choose - either more cash or less with more equity. Because not everyone seems to be very interested in ownership. They just want to be paid.
I was lucky enough to learn from a team as we went through a google acquisition and watch and learn as the technology was scaled in both the context of a startup, and later inside Google. I was the whitebelt in the back of the room but that experience of working in that team was the most valuable experience I could have ever hoped for and I still regularly mail the people that I absorbed from to let them know how grateful I am to have taken me along on that journey. It's not a common experience but that completely humbled me and fixed my dunning-kruger arrogant ass.
If you have elixir or scala experience, like FP, like realtime problems...
I personally use Google Sheets for: - Impromptu project planning and release tracking in small teams - Creating test plans for release testing
And not much else as I can do most other things using other tools. If you want to pivot data and do data analysis, yeah you can use a spreadsheet. Or you can use python.
I wouldn't go out of my way to learn the deep depths of excel when you could take time to learn sed or awk or columnar and multi-cursor editing in emacs or other tools that, beyond tasks that can be accomplished in excel, will help you in a wider variety of tasks.
But by all means I would be using excel for simple spreadsheet things. It's not a tool I'd go out of my way to spend time on learning excel as a programmer without a task infront of me as being a curious technically apt programmer means it's quite intuitive and fast to learn whatever I need to accomplish things in excel as I go.
Learn emacs, learn colemac, learn awk, learn clojure, learn pandas. I don't think you need to learn excel beyond basic spreadsheet functionality.
I would recommend avoiding anticholinergics!