From owner-freebsd-questions@freebsd.org Thu May 28 23:39:57 2020 Return-Path: Delivered-To: freebsd-questions@mailman.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.nyi.freebsd.org (Postfix) with ESMTP id CE0D7328F81 for ; Thu, 28 May 2020 23:39:57 +0000 (UTC) (envelope-from aryeh.friedman@gmail.com) Received: from mail-il1-x141.google.com (mail-il1-x141.google.com [IPv6:2607:f8b0:4864:20::141]) (using TLSv1.3 with cipher TLS_AES_128_GCM_SHA256 (128/128 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256 client-signature RSA-PSS (2048 bits) client-digest SHA256) (Client CN "smtp.gmail.com", Issuer "GTS CA 1O1" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 49Y41S6c5mz4Nry for ; Thu, 28 May 2020 23:39:56 +0000 (UTC) (envelope-from aryeh.friedman@gmail.com) Received: by mail-il1-x141.google.com with SMTP id t8so209706ilm.7 for ; Thu, 28 May 2020 16:39:56 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=mime-version:references:in-reply-to:from:date:message-id:subject:to :cc; bh=SnEdKJwrppxrgiM/ZN+uIb3dE3GamIm64rSydGGhnrs=; b=gJrWp0vwPUVTvcmuJ4qFaZGtKDeTRI5hxlwmOi6+BtuDVimEuou+TuS4QjrZDY7IDL ieXVf6gyuZKPfNMw9eCuUhjBZJV0QOBwNiV86/95fVB/4hkelFCVFgILXOlLGwE+dUTR WcSTfVCtqSplttnadzq1pEjtp4Nj2QOYFmZYJAVmygrUZPx7yv7RH3EiYIVosYeePD3h 5+EXsPRuCjR8GwF5HgnxhUaZD9h89UtHh3G8hXm7f9YnHlUhu0nlZ2U49FrXwvg+2Y7x gRnWx4LN5XaIEIJFZr/tPRPSbRxPelfgSxdQPX8CtC3J44Dfv3XPLVrR5bVfrosFPFFK dehA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:references:in-reply-to:from:date :message-id:subject:to:cc; bh=SnEdKJwrppxrgiM/ZN+uIb3dE3GamIm64rSydGGhnrs=; b=IJmc/gJW0Z0USbheJBkN5zihyJDNH9jAPRnVJxR6l2ollE8NVoBorGp/BMa3x4lTY6 sO/EWBPiWsyhBXs4EnGEJAnfFfsg//C67s8qFYvnMFxbn4BfgIK/sl26yL9W853hOfw9 muVpl6bXEviRozuxGTKBY3q8dBWOIhrkB0Z5cES7/TvGAUjyPUGnKx/X3XD9N3s08kn8 ugGEpPRdvMV59ZkMPlNtm8T6BRRkNQ+MeZZVo7oVMyeNEDLP/+XGdt85tshHJa2ohJ3Y M60SYuSuUMyinaKLtGvMTxFw5g4G7kuqFu2KXT2vThqBSYFrP6jL366SRPEzIszrirrE ZmNg== X-Gm-Message-State: AOAM533b/BmHvtQZz93xrEpoc3pTl3yrjKKqzNzF4kAYY8LMIT/dx4bO ZAgH/vjs5082LDKtdLsMNZPLuTvmLB/5eLXHMfo= X-Google-Smtp-Source: ABdhPJwq4wd9au+/wv/pzWKZoQ8gyjMRmQJRMFDia1qAB654A2FE1jLmZNqeuq94C7KcZ5Dte5kWoWvMQKLACHSpvEk= X-Received: by 2002:a92:6b10:: with SMTP id g16mr5057947ilc.29.1590709195990; Thu, 28 May 2020 16:39:55 -0700 (PDT) MIME-Version: 1.0 References: <20200527203627.2c9faae5@archlinux> <21722039-a01f-37d3-e035-6be2950485e2@kicp.uchicago.edu> <20200528022232.662100a3@archlinux> <0e7aa839-eecf-37f7-4498-4ecc73f44689@kicp.uchicago.edu> <20200528164705.278f3983.freebsd@edvax.de> <20200528162637.73917881c2c395f80a5384fc@sohara.org> <20200528170047.d55ed6402f71c9b2558c78bc@sohara.org> <20200528193512.7fcf9192@archlinux> <20200528204832.7bf83e2b@archlinux> <20200528224701.7cc6f222@archlinux> <20200529002155.774696fe.freebsd@edvax.de> In-Reply-To: <20200529002155.774696fe.freebsd@edvax.de> From: Aryeh Friedman Date: Thu, 28 May 2020 19:39:44 -0400 Message-ID: Subject: Re: Back to the topic of the original thread: FreeBSD Cert To: Polytropon Cc: Ralf Mardorf , Ralf Mardorf via freebsd-questions X-Rspamd-Queue-Id: 49Y41S6c5mz4Nry X-Spamd-Bar: --- Authentication-Results: mx1.freebsd.org; dkim=pass header.d=gmail.com header.s=20161025 header.b=gJrWp0vw; dmarc=pass (policy=none) header.from=gmail.com; spf=pass (mx1.freebsd.org: domain of aryehfriedman@gmail.com designates 2607:f8b0:4864:20::141 as permitted sender) smtp.mailfrom=aryehfriedman@gmail.com X-Spamd-Result: default: False [-3.17 / 15.00]; RCVD_TLS_ALL(0.00)[]; ARC_NA(0.00)[]; R_DKIM_ALLOW(-0.20)[gmail.com:s=20161025]; NEURAL_HAM_MEDIUM(-1.02)[-1.020]; FROM_HAS_DN(0.00)[]; RCPT_COUNT_THREE(0.00)[3]; FREEMAIL_FROM(0.00)[gmail.com]; R_SPF_ALLOW(-0.20)[+ip6:2607:f8b0:4000::/36]; MIME_GOOD(-0.10)[multipart/alternative,text/plain]; PREVIOUSLY_DELIVERED(0.00)[freebsd-questions@freebsd.org]; NEURAL_HAM_LONG(-0.99)[-0.986]; DWL_DNSWL_NONE(0.00)[gmail.com:dkim]; TO_MATCH_ENVRCPT_SOME(0.00)[]; TO_DN_ALL(0.00)[]; DKIM_TRACE(0.00)[gmail.com:+]; DMARC_POLICY_ALLOW(-0.50)[gmail.com,none]; RCVD_IN_DNSWL_NONE(0.00)[2607:f8b0:4864:20::141:from]; NEURAL_HAM_SHORT(-0.16)[-0.161]; FROM_EQ_ENVFROM(0.00)[]; MIME_TRACE(0.00)[0:+,1:+,2:~]; FREEMAIL_ENVFROM(0.00)[gmail.com]; FREEMAIL_CC(0.00)[rocketmail.com,freebsd.org]; ASN(0.00)[asn:15169, ipnet:2607:f8b0::/32, country:US]; TAGGED_FROM(0.00)[]; RCVD_COUNT_TWO(0.00)[2] Content-Type: text/plain; charset="UTF-8" X-Content-Filtered-By: Mailman/MimeDel 2.1.33 X-BeenThere: freebsd-questions@freebsd.org X-Mailman-Version: 2.1.33 Precedence: list List-Id: User questions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 28 May 2020 23:39:57 -0000 On Thu, May 28, 2020 at 6:22 PM Polytropon wrote: > On Thu, 28 May 2020 22:47:01 +0200, Ralf Mardorf via freebsd-questions > wrote: > > It's trivial to _program_ a digital video recorder to automatically > > record a television programme, [...] > > Yes, but only for _old_ people! :-) > I wonder? I have no problem debugging a compiler or writing a full web app (including the HTTP server) but I have never figured out how to program my DVR (VCR in the old days) to anything except stop flashing 12:00 (and I am one of the pioneers of streaming media ;-)) > > > > [...] but it's not trivial to translate data > > into _code_. > > It's not just data - it's concepts (of behaviour, of data, of > calculations, of interactions, of data exchange, of communications, > of hardware control, etc.). > > That is just the tip of the iceberg. You start with what problem (or even if there is a problem) to solve, this involves getting good solid answers to the five journalistic questions for the current process/system, the ideal one the end-users really want (not the one they will get) as well as the quick and dirty solution and the "done right solution". Note here that many times the best solutions don't even involve a computer (they just are nothing more then refactoring the current manual process and leaving it manual). Of the solutions that do involve using a computer the ones that involve writing any code (including scripts) at all are almost always the last option you should consider on how to solve the problem. Coding is slow, tedious and very error prone even in the hands of the most seasoned developers. The reason for this is what I (and as far I know only me) consider to be the there laws of software engineering: 1. Bugs are a fact of life, get used to it! (The goal of software engineering is to not get rid of them but make catching and fixing them easier) 2. Anyone who claims to fully understand software engineering, computing or computer science (or any major subarea of them) is full of crap (non-PC version full of ) 3. There are no laws to software engineering only recommendations based on very costly (personally and organizationally) F'ups from thinking law 2 doesn't apply to the recommender and/or their organization. All such recommendations make no sense outside of the (narrow) context they are made from. Corollary 1: There are no silver bullets, white knights and Merlin is a myth! Corollary 2: If the recommendation doesn't include references to "Alice in Wonderland" the recommender didn't pay a high enough cost to gain any real wisdom. All this needs to be done before deciding to write any code and then comes the easy part (writing/debugging the code if there is any at all). But before we write any code we need to make decisions about what tools/languages to use, what is the over all system architecture, what should the I/O look like in detail, what algorithms/data structures to use (pick the right algorithm and the data structure will pick it self, pick the right data structure and the algorithm will write it self, pick either one wrong and you will be jealous of how easy Alice had it in Wonderland!), decide on the quality/reliability requirements (including what automated tests to make to make sure once it works it stays working), make sure your design is portable and maintainable, etc. Finally we can start writing some code but where to start? Should we do the riskiest part first or the easiest part, should we do the UI first or the guts, etc.? How can I make sure my code is actually testable, etc. Do I use library classes/methods or do I do roll my own? Etc. Now I get to write the fun and easy part: for(int i=0;i<10;i++) print i; Of course real code is more complex then this ;-) -- Aryeh M. Friedman, Lead Developer, http://www.PetiteCloud.org