Skip to main content

Posts

Showing posts from April, 2020

Finding the Bottleneck in Product Development

Every optimization away from the bottleneck is an illusion. The Book "The Goal" talks about this in the context of fabrics. Here you can see the bottlenecks literally in the form of stock that pile up in front of the machines. It is more complicated in software development. Here the path of production is not clear. Not even the "machines are clear. Here helps the circle of product development that I saw from Kent Beck (I don't know where or when). This is a great framework to detect the bottleneck. I work on it - everything else is an illusion. Besides this, the circle should become as fast as possible. To accelerate it I can use the flywheel concept.

Prolog on a high level to (re/) configure modules

Prolog on a high level on top of other modules. Modules have their own state. Depending on the state, other modules are activated. This state can be saved as a form of config/application state/continuation and so on. The state can be reflected in the user interface. The user interface can change the state. I can express the rules very simple. A decision means further implications for each module. These implications are done via Prolog. Testing is very simple as example scenarios integrate very well. Mocking is trivial. Prolog changes how modules talk.

Languages to Money

How to earn money with computer languages? Languages are one kind of tool. Tools allow learning techniques. They require one or more tools. Multiple techniques allow the realization of use cases Multiply realized use cases make up a product I can sell a product for money

Average out overcorrections

How much of my behavior is a result of overcorrecting a previous attempt that failed? Almost everything. The solution is simple. Write down the failed attempt. Write down the new approach. Take the average and apply it. Simple, not easy.

TCR creates tension and release

Like GeePawHill described, rhythm in programming is the rhythm of tension and release. TCR amplifies this even more and shortens the cycles. Whenever I hit save there is tension while the tests run (1 s) and release when they are green. It feels like playing.

TCR enforces me to understand now!

Example Quaternion to Euler angles and the order. I can not proceed without understanding it completely. Otherwise further development becomes a pain / nearly impossible. TEST(quaterion_euler, yaw_to_quat) { Pose p({0,0,0}, Vector3f{1,0,0}); Quaternionf expected(0.8775826, 0, 0, 0.4794255); Quaternionf actual = p.rotation; EXPECT_NEAR(expected.w(), actual.w(), 0.01); cout

TCR enforces (not enables) single-piece flow

TCR enforces (not enables) single-piece flow. What is a single piece? It depends. You will find out after some minutes. Something between 0-1xLoC. It enforces it - not enables it. To enable it you need other techniques. Without them TCR is frustrating. Show TCR only to people who can enable it.

Own Octree?

8 children Simple Header Lib for C++ PCL implements one  Simple is important The attributes from the sufel meshing paper are important Automatic AABB Bounding Box for boundaries

Fog via Constructive Solid Gemoetry

Wikipedia : Constructive solid geometry Integrate OpenGL with Panda Transparent Object, that masks background drawBackground(C); glColorMask(GL_FALSE, GL_FALSE, GL_FALSE, GL_FALSE); render(RealWorld); glColorMask(GL_TRUE, GL_TRUE, GL_TRUE, GL_TRUE); render(Fog); csg.js and its docs (great)  and demo constructive solid geometry using bsp Stack Overflow : How to create Constructive Solid Geometry in OpenGL / C++ Constructive Solid Geometry with the Stencil Buffe r csg c++/opengl lib

Cargo Cult is Great News for public Product Development

Many have the fear that if I learn through iteration on the market, other companies can steal the result and take a shortcut as they do not go through the learning cycles. Trough the Cargo Cult I do not have this fear. They only see the result but not the reasoning. They will never be able to copy without the whole process. This is the secret, not the end result.

Zero To One & The Lean Startup

Reading "Zero To One" I might get the impression that it disagrees with the Lean Startup. But this seems so only on the surface. While Zero To one Focuses on Vision/Strategy Lean Startup focuses on Strategy/Tactics. The Hedgehog Concept provides a framework to unite both.

Protoyping + Approaval Tests instead of TDD

When I am not sure how or even what I want to do I am in the exploration phase. Doing TDD in this phase leads to a lot of waste. I have good experience with prototypes. These are little programs, that do only one thing and are 50 to maybe max 200 lines long. As they do only one thing checking them for correctness is really easy. If it outputs what you expected the "test" is green. This allows very rapid iterations. Adding approval tests afterward makes test-after cheap. Downsides: Edge cases are more difficult and I may not be that motivated to add enough unit tests afterward. The downsides may overweight the upsides. I will not decide before a task what to do but go the path of least resistance.

The future is about the collaboration of humans and computers and their interface

Computers and humans are good at a disjunct set of tasks. Building the superset of the skills for these tasks create a system that is way way better than one set alone. We will create a better world as augmented humans! How to do it? We live in different worlds. We humans in the real one, the computers in the virtual one. Synchronizing and blending will merge the worlds and enable new collaborations. This merging is the infrastructure on which other applications build on.

Future Tale

I am waking up. I feel awake. There is bright sunlight in my room. At least it seems like sunlight. An army of lamps simulates the sun. I look at my alarm to check the time. It is eight in the morning. My alarm did not ring in a long time. Since my house central system detected and since then monitored my circadian rhythm, I wake up naturally. With out talking I asked for the news and a variety of thoughts pop up in my head. The annual statistics of natural death rates were published by some scientists. "Man, we live so long these days". After showering I decide to eat my breakfast at the beach. As I enter the kitchen, the walls are replaced by a great view and I am sitting on a platform at my table.

Future Tales

Our society has stopped talking about a bright future, and science does not help either. You can read only the future in 10 or 20 years. I am aiming for visions. As it is no topic in any discussion anymore, I did not think about it a lot neither. Therefore I start short stories packed with a lot of visions. I will set a fixed time (maybe 10 minutes) for each and write whatever comes to mind. I call them Future Tales.

How to evaluate strategic producs

Take the questions from Zero To One, which every company has to answer. These are (p153): 1. The Engineering Question 2. The Timing Question 3. The Monopoly Question 4. The People Question 5. The Distribution Question 6. The Durability Question 7. The Secret Question I take my potential and existing products and evaluate, "Yes," "No," or "?" for every question and product. Sum the answers up where "Yes" is 1, "?" is 0, and "No" is -1. Compare the results. You know how important the different products are, where the strengths and weaknesses are and where to work on.

Why makes Test-First sense?

Because I want to declare WHAT I want before I think about HOW I implement it. Test-Firsts is precisely this. While programming Test-First, I am schizophrenic. There is a declarative programmer and an imperative one. In SQL, the latter is the DB-Engine.

Process to enable continuous refactoring

Without a process like TDD, continuous refactoring is not possible for me. There are times where I simply forget it, and these tend to stretch. This does not happen if it is partly how I develop software. Like in TDD or TCR. It is the same as with everything else related to software: Make the best way the easiest. My lazy mind will follow the easiest.

How to attract attention with my paper?

ACM opened their digital library ( http:// dl.acm.org ) till June 30 - thanks! Reading through it reinforces one thing: don't use titles that ask a question. Just tell the answer. Then I don't have to dig through your abstract (or even conclusions!) to find your answer! I should follow up with - I like Kent Beck's patterns for papers - http://cs.utexas.edu/~wcook/papers/HowToGetaPaperAcceptedToOOPSLA/HowToGetAPaperAcceptedToOOPSLA.htm - "One startling sentence" - Bill Wake on Twitter engage audiences in 4 sentences. Sentence 1: State the problem Sentence 2 : Why is the problem is a problem? Sentence 3: A “startling” sentence Sentence 4: Implications of the startling sentence.

The types of programming languages I want to learn

I really don't care which programming language I am using as long as it enables some stuff like rapid feedback. But this is a matter of tooling most of the time. What I am really looking for is to master a set of languages that enables stuff. Here is a list what I want to be able (trough a language): Imperative Programming: I always have to say something directly to my computer GPU/Herogeneus: Doing stuff on more than one core in parallel FPGA: Making Hardware Soft Distributed Systems: Some concepts an in language, some out language Machine Learning is a way to program The web - an own category

Dimensions of writing software

Some dimension in which I have to write software: Domain-Knowledge (Problem-Domain) Coding: How to write down a thought in a formal language. Includes testing Design: How to structure the output of Coding Refactoring: How to restructure on different levels including Coding Teams: How to organize and lead teams  Knowledge of Tools, Libraries, and Frameworks Scientific Papers + Reading other Peoples Code + Reading Books (Solution-Domain) Sales: How to sell it? Deployment I am missing some entries but more important, I am missing a simpler abstraction. I feel it but cannot formulate it yet.

Craftsmanship is key to creativity

The painter has to draw lines. The dancer has to master certain movements. This is no art - yet. The artwork comes what you do with your skills. To be creative, you have to learn your tools - like a craftsman. Craftsmanship enables creativity. It gives an upper bound. What sense makes creativity if you cannot apply it?