Els programadors, en general, anem aprenent segons fem, a vegades per gust, a vegades per motius laborals. I m'he trobat una reflexió interessant sobre l'aprenentatge al blog d'Scott Hanselman que vaig seguint segons va publicant.
Ell explica que se li acosta un jove i li pregunta que ha d'estudiar, per que estava preocupat per la universitat que li ensenyen .NET i ara el que es porta és .NET Core. I ell li contesta:
For the young person I spoke to, yes .NET Core may be a little different from .NET Framework, and they might both be different from Ruby or JavaScript, but strings are strings, loops are loops, memory is memory, disk I/O is what it is, and we all share the same networks. Processes and threads, ports, TCP/IP, and DNS - understanding the basic building blocks are important.
Drive a Honda or a Jeep, you'll still need to replace your tires and think about the road you're driving on, on the way to the grocery store.
Jo sempre critico els programadors que no saben com funciona un disc, com va una cache, perque al fi i al cap el hardware és la carretera que ens porta. O per els que presumeixen de fer les coses en l'últim llenguatge de moda: recordo que un string és un string, un bucle un bucle i un if... Ademés sempre penso en el manteniment del software. Quantes explicacions ha de rebre un ésser humà per entendre el codi d'un programa? A vegades quan els compiladors incorporen millores, no són tan una millora com un inconvenient... veiem aquesta del C# 8.0, primer el codi clàssic:
switch (policy)
{
case FileExistsPolicy.Fail:
throw new Exception($"File '{targetFile}' already exists.");
case FileExistsPolicy.Skip:
return false;
case FileExistsPolicy.Overwrite:
return true;
case FileExistsPolicy.OverwriteIfNewer:
return File.GetLastWriteTimeUtc(targetFile) < File.GetLastWriteTimeUtc(sourceFile);
default:
throw new ArgumentOutOfRangeException(nameof(policy), policy, message: null);
}
I la nova:
return policy switch
{
FileExistsPolicy.Fail => throw new Exception($"File '{targetFile}' already exists."),
FileExistsPolicy.Skip => false,
FileExistsPolicy.Overwrite => true,
FileExistsPolicy.OverwriteIfNewer => File.GetLastWriteTimeUtc(targetFile) < File.GetLastWriteTimeUtc(sourceFile),
// _ => throw new ArgumentOutOfRangeException(nameof(policy), policy, message: null)
};
Tampoc li veig la millora, canvien el ":" per "=>", ja posats podrien posar "-->", en fi, per gustos els colors. |