43 karma · joined November 8, 2018
I think what’s universally important is to keep active and engaged in what we’re doing. Some of us have to tell fictions that what we’re doing has meaning, whilst others just know what brings meaning to their life.
My initial approach was to store IP addresses into a hashmap but if the average query was to check address blocks like /24, then it'd turn out to be very poor data structure to search through.
Consider: is there an equivalent concept of Turing Completeness for compilers with respect to computational propositions?
Thanks for writing this, I've been struggling to write about fallacies in software verification for over a month now.
I realized that I wasn't writing for myself, or even folks who are likely to agree (mathematicians, logicians) with my viewpoint. I was writing to convince and justify, instead of examine, teach, or tell.
I think what it important in this discussion is the fact that "software engineer" right now is an aspirational term and that we don't use formal methods to verify software behavior, and instead rely on changing best practices.
Egineering implies a more rigorous process than most software really gets.
As a software developer who's interested in this but has no experience with low-level hardware interface, how does one debug with the microUSB connector? What displays the console output?
I keep a list of all my skills, experience and education in a YAML file and have a LaTeX template that I clone when creating a new resume. Then it’s just a matter of replacing the template fields with YAML metadata and running Pandoc.
The process of figuring out what's valuable is different from person to person. Some people know from a young age. Others figure it out in college or post-education. My values have been shaped and refined over the course of high school, college, and work. The high level picture may not be clear, but I believe it's beneficial to hone in on what you find valuable and see where it takes you.
The writers did a phenomenal job of using an alter ego to slowly change the character from Mr. Chips to Scarface.
These tend to be formulaic from my experience, they consist of a catering plates full of finger foods like sandwiches, cheese, chips, cookies.
Product launches & demos were small celebrations at the end of the sprint. So one sprint was Croissant Week, another may be Donut Week, and the scrum master would be responsible for bringing in breakfast at Demo Day.
We'd get breakfast from a local bakery or cafe, and because our team was 10-12 people, there wasn't a need for a large delivery.
In Java, many projects overuse getters and setters. Getters and setters break encapsulation. More so public setters since they allow any piece of code anywhere can change the value of an object's internal state at any time.
Consider a class Person. A person has a name, SSN, salary. Let's assume name and SSN cannot be changed. What about salary? We don't have to add a setSalary() method. Instead, we should have something like: public void acceptNewJob(Job newJob) { salary = newJob.getSalary(); }
I'm interested in this as a beneficiary not as a direct participant. I wonder if recruiters would be interested in a course like this?
An area that I think about a lot is how effective are companies at spreading useful information to the people who can best utilize that information. Internal tools are interfaces to information. Wikis, mailing lists, code repositories, Q&A boards, chat rooms are all different interfaces that I commonly search through for useful bits. A formal spec would help us quantify how effective our company is at spreading information. What information is commonly rewritten, what pages are hard to get to, which internal tool does a page of documentation belong to, etc.
Do you know how TablePlus clients compare on Windows and Mac? Been wondering since they're both built natively instead of using cross platform development like Electron.
I use to write creative thoughts in a text document or Notes on iOS. I never revisited these notes. The most important thing is having a dedicated system that you revisit daily to revise and refine the ideas / tasks.
That meant that the system I used needed to meet these criteria:
1. Accessability: I do my planning throughout the day, in bed, on the train, at work, etc. A physical notebook doesn’t work for me because there was too much friction in getting a notebook and pen out while in bed or on the subway.
2. Synchronization: Working on Mac / iOS. Thorough notes are taken on a laptop while on-the-go notes are needed for quick scribbles.
3. Indexing: Having a proper file system to organize and categorize thoughts. I’ve found that Things works good enough for 90% of notes. For other uses, I supplement it with Quiver for code related notes or food recipes.
4. Thoroughness: Having ability to write quick one-line notes or in-depth notes that sufficiently captures my thought is important.
Even for statically typed languages like Java, I find the existing tools lacking in helping me understand the code thoroughly. I mostly rely on the IDE to navigate code which I then mentally jot down the behavior of the code segment. Writing code this way is way too error-prone, and unfortunately testing isn't foolproof either.
It isn't until something breaks that we really begin to learn the nuances of the system...